5

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

4

2 回答 2

3

不,您不需要唤醒锁,因为操作系统会为您获取唤醒锁(代码)。onLocationChange()唤醒锁在结束时或当您的广播接收器接收到意图(对于接口的意图版本)时被释放。onLocationChange()如果您开始一些异步工作,例如使用其他线程,您需要自己的唤醒锁。

于 2014-06-16T17:57:44.783 回答
0

我写了一个飞行记录应用程序,它也需要每隔几秒更新一次以识别起飞和着陆。接收到的数据在服务中进行评估。要使服务保持活力,您将需要 WakeLock。当检测器(自动识别相关事件)启动时我得到锁,当用户关闭检测器时我释放锁;这也是服务的生命周期,因此在 onCreate 中获取锁并在 onDestroy 中释放。我使用 SCREEN_DIM_WAKE_LOCK 来节省一些电量。

于 2013-11-09T11:44:59.463 回答