0

我有一个应用程序可以连续记录用户的位置。位置更新将非常频繁,以获得用户所走路线的精确映射。为了让应用程序在手机睡着时记录地理点,我使用了唤醒锁,当用户停止记录或在onDestroy().

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

我在这件事上的问题是:我什么时候应该从位置管理器中删除位置侦听器?我应该释放听众 ionDestroy()吗?或者,只要我在听位置管理器,我可能根本不需要唤醒锁?如果是这样应该如何处理?

我在其他地方看到过这个问题,比如这里: Android - When using LocationManager.requestLocationUpdates, do I need a WakeLock?

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

4

1 回答 1

1

您没有提到您希望获得与解决方案相关的位置的频率。

采集频率

如果你想获取频率大于每 5 分钟 1 个的位置,我建议让监听器注册。GPS 设备应该在采集之间进入节能模式。

如果频率小于该频率,则可以考虑在获得位置后删除列表器并使用计时器任务或警报管理器再次注册,具体取决于您的应用程序设计。

唤醒锁

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

应用架构

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

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

于 2012-10-18T00:40:14.543 回答