服务更新未激活的活动

时间:2014-04-06 15:40:04

标签: android android-intent service

实现这一目标的最佳方法是什么?

  

1)创建MainActivity(即UI)并启动一个开始监听TCP套接字的服务(它应该是一个IntentService,因为MainActivity是唯一的客户端吗?)。

     

2)服务收到消息并在出现问题时更新UI(使用LocalBroadcastManager?)。

     

3)用户通过单击后退或主页按钮关闭活动。 MainActivity不再处于活动状态,但服务应该继续在后台运行,接收消息并以某种方式与MainActivity(不存在)进行通信。我不知道这个,比如runOnUiThread()?

     

4)当用户回来并恢复MainActivity时,UI不仅应显示新消息,还应显示" old" ones:自服务开始以来收到的每条消息。

     

5)消息不是永久性的:如果整个应用程序被杀死,则应删除它们,电话关闭ecc。它们具有相同的服务生命周期。

我担心的是,没有像没有活动的活动(第3点)这样的事情,我应该在本地文件中写消息,检查更新onCreate()和onResume() 。有更聪明的方法吗?第3点和第4点是关键点。完成它们的最佳方法是什么? (无需编写代码,只需使用关键字解释或链接到示例)。

1 个答案:

答案 0 :(得分:0)

  

MainActivity不再有效

MainActivity可能会被销毁,而不仅仅是#34;不活跃"。

  

并以某种方式与MainActivity进行通信

即使有MainActivity的实例尚未被垃圾收集,如果它被销毁,它将永远不会被再次使用。而且你无法与尚不存在的MainActivity实例交谈。

  

当用户回来并恢复MainActivity时,UI不仅应显示新消息,还应显示" old" ones:自服务开始以来收到的每条消息。

在这种情况下,

MainActivity需要数据,而不是将数据推送到它。是否通过向服务询问此数据(通过bindService(),通过在事件总线上发布GimmeMyData事件等),或者是否活动和服务正在通过某些中介(例如ContentProvider)取决于你。