暂停活动时如何接收和处理位置更改

时间:2016-10-28 19:17:25

标签: android service android-service android-location android-intentservice

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

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

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

但是 - 我仍然希望记录位置服务中每个onLocationChanged事件中返回的坐标,但是,当然Activity已暂停,因此无法执行此操作。

我并不特别想阻止屏幕在清单中消隐(因此Activity永远不会停顿)。虽然我相信,如果收到电话等,它仍会暂停。

我的解决方案是在其中一个IntentService暂停事件(ActivityonPause或{{1}中启动onStop接收位置更新,然后在onSaveInstanceState重新启动时,从服务中收集数据并关闭服务。

这是实现这一目标的有效和正确的方法,还是有一些我不知道的Android黑色艺术?如果是这样,Activity是正确的方法(或者我应该使用IntentService)吗?

2 个答案:

答案 0 :(得分:0)

Proberly是一个由警报管理员重新启动的正常服务,这是一个更好的主意。

答案 1 :(得分:0)

为了束缚松散的目标,我现在要添加自己的答案,我已经实现了一些东西。

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

因此,我实现了正常LocationService,但我将其绑定到调用Service。我还设置了Activity的回调。这样,当收到'ping'时,我可以处理它并将数据直接传回Activity。此外,只要绑定到位,Activity就会保持活着。当Service被销毁时我清除了活页夹。

这完美无缺......但是

然后我发现Activity中没有处理LocationService'ping'的原因是因为我在Activity {{{{}} {{{{}} {{}}时断开连接1}}被召唤。移除此项后,GoogleAPIClient处理了“ping”处于停止状态,因此无论如何都不需要Activity

因此,对这个问题的正确答案是...... onStop应该在后台继续处理(除非为了内存管理目的而将其销毁),所以请检查你是不是在“关闭”处理程序中停止了什么{ {1}} Activity等等。那么你就不会浪费时间像我一样写作服务!