我正在寻找一些应用程序设计建议。
我有一个应用程序连接到Google位置服务并跟踪它收到的位置坐标。这些在UI上显示为路径。
当屏幕超时并变为空白时,此Activity
当然会按照正常的活动生命周期关闭。
但是 - 我仍然希望记录位置服务中每个onLocationChanged
事件中返回的坐标,但是,当然Activity
已暂停,因此无法执行此操作。
我并不特别想阻止屏幕在清单中消隐(因此Activity
永远不会停顿)。虽然我相信,如果收到电话等,它仍会暂停。
我的解决方案是在其中一个IntentService
暂停事件(Activity
,onPause
或{{1}中启动onStop
接收位置更新,然后在onSaveInstanceState
重新启动时,从服务中收集数据并关闭服务。
这是实现这一目标的有效和正确的方法,还是有一些我不知道的Android黑色艺术?如果是这样,Activity
是正确的方法(或者我应该使用IntentService
)吗?
答案 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
等等。那么你就不会浪费时间像我一样写作服务!