我从一个片段开始一个前台服务,该片段在调用startService()
后被破坏,这是我无法使用ResultReceiver
或Messanger
的原因。所以该选项仍为PendingIntent
。如何使用PendingIntent在任何活动/片段之间进行前台服务(托管在不同进程中)之间的通信?
答案 0 :(得分:1)
您有两个不同的问题:
如何从服务流程获取数据到UI流程?
如何从您为#1做的任何事情中获取数据到UI的任何部分需要该数据?
#1有许多解决方案:PendingIntent
,ResultReceiver
,Messenger
,AIDL定义的绑定服务连接回调等等。#2主要是一个问题使用事件总线或类似的东西来警告所有相关的Java对象有关新数据。
因此,例如,这是一个使用PendingIntent
的袖口方法:
在您的活动流程中实施BroadcastReceiver
或Service
,在清单中注册,但没有<intent-filter>
在调用startService()
时,请使用PendingIntent
或getBroadcast()
工厂方法创建getService()
,并使用Intent
标识您的BroadcastReceiver
{1}}或Service
,并将PendingIntent
添加到与Intent
startService()
的额外内容中
您的服务在其他流程中,当有数据要传递到活动流程时,calls send()
on the PendingIntent
,包括Intent
,其中包含要填写广播或服务请求的数据
来自第1步的BroadcastReceiver
或Service
将Intent
传递给它,并使用事件总线让您的其余活动过程知道发生的一切,还处理活动过程中 nothing 为事件注册的情况(例如,如果所有活动都被销毁,则提出Notification