0

我正在寻找一些应用程序设计建议。如何在活动暂停时接收和处理位置更改

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

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

但是,我仍然要记录位置服务中每个onLocationChanged事件回来的坐标,但当然,Activity已暂停,因此它不能这样做。

我并不特别想要防止屏幕在清单中消隐(因此Activity永远不会暂停)。虽然我相信它仍然会暂停比如说,如果一个电话接收等

的解决办法是在Activity暂停事件之一(无论是,onStoponSaveInstanceState)启动一个IntentService接收位置更新,然后当Activity重新启动时,从服务收集数据并关闭服务。

这是实现这一目标的有效且正确的方式,还是存在一些我不知道的Android黑色艺术?如果是这样,是IntentService正确的方式去(或应该使用Service)?

回答

0

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

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

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

这工作完全....无论其

后来我发现,该LocationService“坪”没有在Activity被处理的原因是bacause我断开GoogleAPIClientActivityonStop被调用。删除了这个,Activity处理了处于停止状态的'ping',因此无论如何都不需要Service

因此,正确回答这个问题是... Activity应继续处理在后台(除非它破坏了内存管理的目的),所以请你没有在你的“关机”处理 onStop等停止的东西那么你不会像我一样浪费时间写服务!

0

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

+0

你介意解释为什么这样更好吗?这不就是一个由调度程序启动的“服务”,而不是实际需要的时间(即当我的应用程序暂停时)? – SimonH