实现这一目标的最佳方法是什么?
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点是关键点。完成它们的最佳方法是什么? (无需编写代码,只需使用关键字解释或链接到示例)。
答案 0 :(得分:0)
MainActivity不再有效
MainActivity
可能会被销毁,而不仅仅是#34;不活跃"。
并以某种方式与MainActivity进行通信
即使有MainActivity
的实例尚未被垃圾收集,如果它被销毁,它将永远不会被再次使用。而且你无法与尚不存在的MainActivity
实例交谈。
在这种情况下,当用户回来并恢复MainActivity时,UI不仅应显示新消息,还应显示" old" ones:自服务开始以来收到的每条消息。
MainActivity
需要拉数据,而不是将数据推送到它。是否通过向服务询问此数据(通过bindService()
,通过在事件总线上发布GimmeMyData
事件等),或者是否活动和服务正在通过某些中介(例如ContentProvider
)取决于你。