android后台位置更新和wakelock

android后台位置更新和wakelock,android,gps,wakelock,Android,Gps,Wakelock,我正在开发一个android应用程序,在这个应用程序中,我需要使用GPS提供商在后台获得一段时间的位置更新,因此我需要在用户不再与它交互时发生位置更新。我自己做了一些测试,比较了LocationManager的requestSingleUpdate(提供者,PendingEvent版本)和RequestLocationUpdate(提供者,minTime,minDistance,intent版本)。在我的Droid Razr HD上获取了大量数据后,使用requestLocationUpdate

我正在开发一个android应用程序,在这个应用程序中,我需要使用GPS提供商在后台获得一段时间的位置更新,因此我需要在用户不再与它交互时发生位置更新。我自己做了一些测试,比较了LocationManager的requestSingleUpdate(提供者,PendingEvent版本)和RequestLocationUpdate(提供者,minTime,minDistance,intent版本)。在我的Droid Razr HD上获取了大量数据后,使用requestLocationUpdates似乎比requestSingleUpdate更可靠(对于这两种方法,我实际上比较了报告的GPS位置和我实际所在的位置,即不使用报告的精度,并且RequestLocationUpdate不仅比我的实际位置准确得多,而且它返回的位置固定时间与当前时间相同,比使用requestSingleUpdate选项的频率要高得多。)on)。我知道如何使用AlarmManager和重复报警以及call requestSingleUpdate,这样我只需要在每次报警响起时保持wakelock,但这是因为使用RequestLocationUpdate的准确性提高了(至少在我的手机测试中)我想改用这种方法。我的问题是,如果我使用requestLocationUpdates方法,我真的不清楚在用户不与手机交互的情况下,我该如何保持wakelock以保持更新。我是从从从服务启动的单独线程调用requestLocationUpdates(我读到这是标准模式).我的问题是,我是否需要在我希望位置更新持续出现的整个时间内保持唤醒锁?如果我没有自己的唤醒锁,位置更新是否会持续出现,每次更新都会唤醒手机?如果这是真的,这些更新会创建自己的唤醒锁吗?如果是,他们什么时候释放唤醒锁?我似乎不知道我写了一个飞行记录应用程序,它也需要每隔几秒钟更新一次,以识别起飞和着陆。接收到的数据在服务中进行评估。为了保持服务的有效性,你需要一个唤醒锁。当探测器启动时,我得到了锁(自动识别相关事件)启动,当用户关闭探测器时,我释放锁;这也是服务的生命周期,因此在onCreate中获得锁,并在onDestroy中释放。我使用屏幕调暗唤醒锁来节省一些电源。

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

谢谢你的提示。我想我可能还需要在前台启动该服务,因为它可能会运行一段时间,我需要它保持不动。我知道这可能会导致电池大量耗电,但我只需测试一下,因为我可能有一些方法可以用其他线程来缓解耗电设计决策。如果没有,我将使用requestSingleUpdates返回AlarmManager路线。我希望android文档在这方面能做得更好。似乎你必须从不同的地方拼凑大量信息才能看到整个画面。使用Smasung Galaxy Tab 10.1N使用上述策略可以实现连续更新记录时间为6小时,剩余电池电量约为40%。