Activity 暂停时如何接收和处理位置变化

How to receive and process location changes when an Activity is paused

我正在寻找一些应用程序设计建议。

我有一个连接到 Google 定位服务并跟踪它接收到的位置坐标的应用程序。这些在 UI 上显示为路径。

当屏幕超时并变为空白时,此 Activity 当然会按照正常的 Activity 生命周期关闭。

但是 - 我仍然想记录来自位置服务的每个 onLocationChanged 事件返回的坐标,但是,当然,Activity 已经暂停,所以它不能这样做。

我并不是特别想阻止清单中的屏幕空白(因此 Activity 永远不会暂停)。虽然我相信如果收到 phone 呼叫等,它仍然会暂停

我的 解决方案是在 Activity 暂停事件之一(onPauseonStoponSaveInstanceState) 接收位置更新,然后当 Activity 重新启动时,从服务收集数据并关闭服务。

这是实现此目标的有效且正确的方法吗?还是有一些我不知道的 Android 魔法?如果是这样,IntentService 是正确的方法吗(或者我应该使用 Service)?

由 alarmmanager 重新启动的普通服务可能是一个更好的主意。

为了收尾,现在我已经实现了一些东西,我将对此添加自己的答案。

我最终的解决方案是 而不是 IntentService。这是因为我认为 IntentService 会认为它的工作是 LocationService 的实际设置,一旦该工作完成,它就会自行关闭而不是等待 LocationService 'pings'。

因此,我实现了一个普通的Service,但我将它绑定到调用Activity。我还设置了对 Activity 的回调。这样,当收到 'ping' 时,我可以对其进行处理并将数据直接传回给 Activity。此外,只要绑定到位,Service 就会保持活动状态。当 Activity 被销毁时,我清除活页夹。

这很完美....但是

然后我发现 LocationService 'pings' 没有在 Activity 中处理的原因是因为我在 Activity 时断开了 GoogleAPIClient =] onStop 被调用。删除它后,Activity 即使在停止状态下也会处理 'pings',因此无论如何都不需要 Service

因此这个问题的正确答案是...Activity 应该继续在后台处理(除非它出于内存管理目的而被销毁),所以检查你没有停止你的东西 'shutdown' handlers onPause onStop etc. 然后你就不会像我一样浪费时间写服务了!