即使屏幕关闭,如何在Android中处理用户地理点的连续记录?

即使屏幕关闭,如何在Android中处理用户地理点的连续记录?,android,android-location,android-wake-lock,Android,Android Location,Android Wake Lock,我有一个应用程序,它正在不断记录用户的位置。位置更新将非常频繁,以获得用户所走路线的精确映射。当手机进入睡眠状态时,为了让应用程序记录地理点,我使用了一个唤醒锁,当用户停止记录或在ondestory()中时会释放该锁 我现在意识到我没有从位置管理器中删除位置侦听器。如果用户在提取应用程序之前忘记按“停止录制路由”按钮,则会导致电池耗尽。我最初的想法是在onPause()中删除它,但是我担心onPause()可能会在屏幕关闭时被调用,尽管我有一个唤醒锁(但不是屏幕打开) 我的问题是: 何时应从位置

我有一个应用程序,它正在不断记录用户的位置。位置更新将非常频繁,以获得用户所走路线的精确映射。当手机进入睡眠状态时,为了让应用程序记录地理点,我使用了一个唤醒锁,当用户停止记录或在
ondestory()
中时会释放该锁

我现在意识到我没有从位置管理器中删除位置侦听器。如果用户在提取应用程序之前忘记按“停止录制路由”按钮,则会导致电池耗尽。我最初的想法是在
onPause()
中删除它,但是我担心
onPause()
可能会在屏幕关闭时被调用,尽管我有一个唤醒锁(但不是屏幕打开)

我的问题是: 何时应从位置管理器中删除位置侦听器?我应该释放侦听器I
onDestroy()
?或者,只要我在听位置管理器的话,我根本不需要唤醒锁?如果是这样,应如何处理

我在其他地方也看到过这样的讨论:


但似乎没有一个绝对的答案。

您没有提到您希望获得与soluiton相关的位置的频率

采集频率

如果您想获取频率大于每5分钟1次的位置,我建议让侦听器保持注册状态。GPS设备应在采集之间进入节能模式

如果频率小于这个,那么你可以考虑在你获得位置后删除ListStter,并使用定时器任务或AlalMeMac重新登记它,这取决于应用程序的设计。 唤醒锁定

我自己从来没有尝试过,但我的期望是,如果没有人要求Android保持清醒,Android将在一段时间没有用户交互后进入睡眠模式。即使您注册了一个侦听器,也应该没有什么不同

应用架构

当某些其他活动部分或全部覆盖您的活动屏幕时,将调用
onPause()
onStop()
。因此,如果您想保持连续录音,这不是注销侦听器的合适位置。此外,如果用户离开您的应用程序,录制将停止


我建议您使用一项服务记录位置,如果您的采集间隔时间很短,或者使用
AlarmManager
来安排不太频繁的采集。

哇,谢谢您的回复。我的应用程序被用户用来记录他们通过汽车、自行车或步行所走的“路线”。这意味着我将需要更新非常频繁的人骑汽车或自行车,例如,因为我希望路线相当准确。我想现在我将尝试使用onStop()和onDestroy()来释放侦听器。毕竟,如果用户忘记关闭录制,那么在用户不使用应用程序时,确实需要将其释放。