Activity 暂停时如何接收和处理位置变化
How to receive and process location changes when an Activity is paused
我正在寻找一些应用程序设计建议。
我有一个连接到 Google 定位服务并跟踪它接收到的位置坐标的应用程序。这些在 UI 上显示为路径。
当屏幕超时并变为空白时,此 Activity
当然会按照正常的 Activity 生命周期关闭。
但是 - 我仍然想记录来自位置服务的每个 onLocationChanged
事件返回的坐标,但是,当然,Activity
已经暂停,所以它不能这样做。
我并不是特别想阻止清单中的屏幕空白(因此 Activity
永远不会暂停)。虽然我相信如果收到 phone 呼叫等,它仍然会暂停
我的 解决方案是在 Activity
暂停事件之一(onPause
、onStop
或 onSaveInstanceState
) 接收位置更新,然后当 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. 然后你就不会像我一样浪费时间写服务了!
我正在寻找一些应用程序设计建议。
我有一个连接到 Google 定位服务并跟踪它接收到的位置坐标的应用程序。这些在 UI 上显示为路径。
当屏幕超时并变为空白时,此 Activity
当然会按照正常的 Activity 生命周期关闭。
但是 - 我仍然想记录来自位置服务的每个 onLocationChanged
事件返回的坐标,但是,当然,Activity
已经暂停,所以它不能这样做。
我并不是特别想阻止清单中的屏幕空白(因此 Activity
永远不会暂停)。虽然我相信如果收到 phone 呼叫等,它仍然会暂停
我的 解决方案是在 Activity
暂停事件之一(onPause
、onStop
或 onSaveInstanceState
) 接收位置更新,然后当 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. 然后你就不会像我一样浪费时间写服务了!