【发布时间】:2013-11-09 04:18:44
【问题描述】:
我正在开发一个 android 应用程序,我需要在后台使用 GPS 提供程序长时间获取位置更新,因此我需要在用户不再与其交互时发生位置更新。我对自己的比较 LocationManager 的 requestSingleUpdate(提供者,pendingIntent 版本)和 requestLocationUpdates(提供者,minTime,minDistance,intent 版本)做了一些测试。在我的 Droid Razr HD 上获取大量数据后,使用 requestLocationUpdates 似乎比 requestSingleUpdate 可靠得多(对于这两种方法,我实际上将报告的 GPS 位置与我实际所在的位置进行了比较,即不使用报告的准确性,以及 requestLocationUpdates不仅对于我的实际位置更加准确,而且它返回的位置修复时间与当前时间相同,比使用 requestSingleUpdate 选项更频繁)。我知道如何将 AlarmManager 与重复警报一起使用并调用 requestSingleUpdate 以便每次警报响起时我只需要保持唤醒锁,但由于使用 requestLocationUpdates 的准确性提高(至少在我的手机测试中)我想改用那个方法。我的问题是,如果我使用 requestLocationUpdates 方法,我真的不清楚我必须做些什么来保持唤醒锁以在用户不与手机交互时保持更新发生。我从一个从服务启动的单独线程调用 requestLocationUpdates(我读到这是标准模式)。我的问题是,我是否必须在希望位置更新不断更新的整个时间内保持唤醒锁?如果我没有自己的唤醒锁,位置更新是否会不断更新,每次新更新都会唤醒手机?如果这是真的,这些更新是否会创建自己的唤醒锁,如果是,它们何时释放唤醒锁?我似乎无法找到一个明确的答案。非常感谢任何帮助。
【问题讨论】: