【问题标题】:How to handle very large number of proximity alerts?如何处理大量接近警报?
【发布时间】:2013-03-28 03:22:20
【问题描述】:

我已经在 Android 上构建了一个基于接近警报的应用程序,它按预期工作并完美地触发警报。

作为一个持续的努力,我现在想要解决这个应用程序的可扩展性方面。所以基本上我试图解决一个场景,每个用户可能会订阅 10 到 20 个类别,每个类别可能在特定城市有 100 个 POI(购物等兴趣点)。因此,用户的手机上必须同时注册总共 2000 多个警报。

这有两个后果:

  1. 通过网络从存储库为订阅者获取 2000 个警报的大小可能为 10-20 MiB,并在通过慢速连接加载时挂在 Android 设备上。
  2. 即使加载了所有警报,也会消耗设备上的大量内存。

为了缓解这种情况,我正在寻找适当扩展此应用程序的策略。有没有办法可以找到有关当前位置的扩展信息并请求仅在一公里范围内加载警报?或任何其他推荐的策略来处理此要求。这方面的代码示例会很棒...

谢谢, 双实验室

【问题讨论】:

  • 了解您的问题,但您尝试过什么?
  • minhaz - 到目前为止,当用户登录时,所有警报都会通过 Web 服务从服务器推送到应用程序。话虽如此,我还没有通过抛出这样的场景来测试应用程序大量警报说 2000 年。

标签: android android-alarms android-location


【解决方案1】:

为什么不做一些简单的事情——查询网络服务并让它返回在传入位置(用户位置)的纬度和经度 1 度范围内订阅的所有位置。然后每隔半小时左右通过报警在客户端查看位置,根据你的新位置查询新列表。

【讨论】:

  • 我同意。 @OP,加上一个旁注:如果用户刚刚开始使用您的应用程序,那么数据库为零。他可以创建他需要的任何 POI,应用程序只需将数据与您的服务器同步。如果他使用网络版本已有一段时间,现在要安装 Android 应用程序,请向他展示将整个数据库同步到他的手机的选项。在 Android 中查询 SQLite 中的 2000 条记录不需要太多时间,最多只需几秒钟。您可以使用此应用进行测试RL Benchmark: SQLite
  • @Gabe - 感谢您的回复。我确实考虑过你提到的方法,但我还没有实际实施代码并看到及时性和准确性。半小时后我无法真正检查,因为考虑到用户正在移动,这意味着到那时他会出差很多。相反,我认为我可以使用距离作为刷新警报的因素。但是注销警报会正常工作吗?不断注册/注销不会导致任何问题吗?
  • @Lai - 感谢您的回复。我并不真正担心获取数据库记录和延迟。但这是通过像 GPRS (2G) 这样的慢速连接将这些 2000 多个奇怪的警报数据发送到手机所需的时间。除此之外,另一个问题是一次加载/注册所有这 2000 个警报 - 这会对内存和电池消耗产生任何影响吗?
  • 取消注册警报不应引起问题,事实上,如果您不需要它们,最好不要使用它们(它们会在每次位置升级时花费操作系统处理时间)。我认为只要您为每个请求提供足够的数据,时间应该可以很好地作为检查的触发器,但是无论是时间还是距离都可以,同样的基本想法仍然是合理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
相关资源
最近更新 更多