我想知道基于位置的Android应用程序架构/工作流程的最佳做法是什么?
我当前的代码使用了几个Activity和一个支持Service,以及几个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分钟内没有响应时,我停止任务。
我回报了我的最佳估计。
定位AsyncTask在服务中运行,我设置一个AlarmService 5分钟,向我的服务发送一个Intent来检查我是否需要更新用户的位置。我在两个AsyncTask之间的最小间隔是10分钟。用户只需按一下按钮即可手动请求位置更新。
以上是我如何在我的应用程序中实现Location服务。
我需要知道我的练习是否合适。如果不是什么问题?如果是的话,还有什么可以改进的吗?
答案 0 :(得分:4)
我觉得你差不多了。我有非常类似的解决方案,我想尽快“进出”。
我在我的算法中实施了“准确性”检查。我从一开始就提供1分钟的服务以获得最佳位置,或者如果我获得25米或更高的精确度,我会更早退出。
另外,我不使用AsyncTask作为位置本身 - 服务不会阻塞线程,它会从LocationManager获取并处理回调,所以我不明白你为什么要做AsyncTask。
当我完成获取位置并即将退出时 - 然后我调用异步任务来处理Http帖子到服务器。
就间隔而言 - 我给用户选择5/15/30 / 1hr和1/2天。我对此使用不准确的警报 - 据说电池更好。
答案 1 :(得分:4)
这不是每个人的答案,但这里有一些额外的观点。 Reto Meier,他在谷歌IO中的专业Android技巧建议,如果电池电量不足,不要使用Wi-Fi。
这也可以扩展到位置。让用户知道他的电池太弱了该应用程序将不会使用GPS&网络提供商,而是使用最后一个可能不准确的位置。
你还没有提到它,所以我在最坏的情况下你无法检查位置提供程序是否已启用。您需要检查相同内容并发出警报,要求用户启用位置服务(如果所有提供程序都已禁用)。