【问题标题】:What are the best practices for Location-based Android app's architecture?基于位置的 Android 应用架构的最佳实践是什么?
【发布时间】:2011-06-04 22:00:07
【问题描述】:

我想知道基于位置的 Android 应用架构/工作流程的最佳做法是什么?

我当前的代码使用了几个 Activity 和一个支持服务,以及几个 AsyncTask。

我的应用程序一启动就启动我的服务,我在我的服务中进行所有的 HTTP 调用和解析。而且我还写了一个 AsyncTask 的子类来获取用户的位置。每次我需要更新用户的位置时,我都会运行 AsyncTask。 AyncTask 调用 LocationManager.requestLocationUpdates() 并要求尽快获取位置。我的策略是:
1.首先我获取了GPS和网络的LastKnownLocation,并使用http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate上的方法进行比较。
2.当获得3个GPS位置和5个网络位置,或者GPS和网络中的一个或两个在1分钟内没有响应时,我停止任务。
3. 我返回我所拥有的最好的估计。

Locating AsyncTask 在服务中运行,我将 AlarmService 设置为 5 分钟以向我的服务发送 Intent 以检查是否需要更新用户的位置。我两个 AsyncTask 之间的最小间隔是 10 分钟。用户只需按下按钮即可手动请求位置更新。

以上是我如何在我的应用程序中实现定位服务。
我需要知道我的做法是否合适。如果不是,有什么问题?如果是,有什么可以改进的吗?

【问题讨论】:

标签: android gps location


【解决方案1】:

我想你已经明白了。我有非常相似的解决方案,我想尽快“进出”。

我在算法中实施了“准确性”检查。我从开始提供服务 1 分钟以获得可能的最佳位置,否则如果我获得 25m 或更好的精度修复,我会更早退出。

另外,我不将 AsyncTask 用于位置本身 - 服务不会阻塞线程,它会从 LocationManager 获取并处理回调,所以我不明白你为什么要执行 AsyncTask。

当我完成获取位置并即将退出时 - 然后我调用异步任务来处理向服务器发送的 Http。

至于间隔 - 我为用户提供 5/15/30/1 小时和 1/2 天的选项。我为此使用了不准确的警报 - 据说电池更好。

【讨论】:

  • 5/15/30/1hr 和 1/2day 是一个合理的选择,感谢您的数据。我使用 AsyncTask 主要是因为我想使用 GeoCoder 对位置进行一些后台处理,例如获取 GPS 坐标的字符串表示形式。
  • 我的意思是字符串表示,地址
  • 你说得对,因为涉及到 web 服务 - 将其移出异步是个好主意。不过,我所做的是,我将所有位置记录到 SQL 表中,然后在处理和上传时 - 我将其删除。这让我可以处理启用 GPS 但没有网络的情况。
  • 这确实是个好建议,我会记住的。但在我的应用程序中,没有必要这样做,因为我不需要实际跟踪用户位置,但需要根据用户位置从我的网络服务中获取信息。
【解决方案2】:

这不是每个人的答案,但这里有一些额外的点。 Reto Meier 在他的 Google IO Pro Android 提示中建议,如果电池电量不足,请不要使用 wi-fi。

这也可以扩展到位置。让用户知道他的电池太弱了,应用程序不会使用 GPS 和网络提供商,而是使用可能不准确的最后一个已知位置。

您还没有提到它,所以我将讨论最坏的情况,即您无法检查位置提供程序是否已启用。如果所有提供商都被禁用,您需要检查相同的内容并发出警报,要求用户启用位置服务。

【讨论】:

  • 很有用的小技巧,对我提升用户体验很有帮助。谢谢。
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 2011-08-01
  • 2020-11-08
  • 2013-05-07
  • 2022-01-16
  • 1970-01-01
  • 2010-10-31
  • 2011-03-07
相关资源
最近更新 更多