我有一个应用程序需要跟踪我的位置,在执行此操作时读取传感器并使用信息(即我当前的速度)更新活动。活动还有一个“停止”按钮,允许用户取消后台作业。如果用户导航并且通知应该允许用户返回显示信息的视图,则数据收集应该继续。
到目前为止,我有:
private static MyService instance
字段和一个getter instance = this
onStartCommand(...)
goForeground()
方法,可以调用startForeground(...)
并显示通知(goBackground()
执行相反的操作)MyService.getInstance()
中调用onCreate(...)
,如果它返回null,则会使用startService(someIntent)
updateViews()
方法,用于从服务中提取数据并使用处理程序安排对自身的调用以每500毫秒更新一次视图这很有效。
但是我很确定这不是推荐的方法。它很丑陋,所有对getInstance()
的返回值的调用都包含在非空检查中。此外,所有工作都发生在UI线程中(当我向服务添加更多计算时肯定会出现问题)。此外,我想摆脱活动轮询服务的数据。
推荐的方式是什么?
此时Android文档还不是很清楚,我在Google上找到的所有内容都已过时或解决了不同的问题。请记住:
答案 0 :(得分:0)
正如你所说从服务中提取数据并不是最好的做法,幸运的是有一个名为BroadcastReceiver的东西,这个类在发送意图并且接收器被配置为接收它时唤醒(在清单)。
这允许您的服务在准备就绪时发送数据,或者您的活动可以发送新数据请求。
请注意,intent可以保存数据,因此您不需要将任何静态实例保存到服务中,只需将数据传递给intent