服务和活动之间的通信使用PendingIntent在不同的进程中托管

时间:2016-08-13 20:18:58

标签: android android-service android-pendingintent

我从一个片段开始一个前台服务,该片段在调用startService()后被破坏,这是我无法使用ResultReceiverMessanger的原因。所以该选项仍为PendingIntent。如何使用PendingIntent在任何活动/片段之间进行前台服务(托管在不同进程中)之间的通信?

1 个答案:

答案 0 :(得分:1)

您有两个不同的问题:

  1. 如何从服务流程获取数据到UI流程?

  2. 如何从您为#1做的任何事情中获取数据到UI的任何部分需要该数据?

  3. #1有许多解决方案:PendingIntentResultReceiverMessenger,AIDL定义的绑定服务连接回调等等。#2主要是一个问题使用事件总线或类似的东西来警告所有相关的Java对象有关新数据。

    因此,例如,这是一个使用PendingIntent的袖口方法:

    1. 在您的活动流程中实施BroadcastReceiverService,在清单中注册,但没有<intent-filter>

    2. 在调用startService()时,请使用PendingIntentgetBroadcast()工厂方法创建getService(),并使用Intent标识您的BroadcastReceiver {1}}或Service,并将PendingIntent添加到与Intent

    3. 一起使用的startService()的额外内容中
    4. 您的服务在其他流程中,当有数据要传递到活动流程时,calls send() on the PendingIntent,包括Intent,其中包含要填写广播或服务请求的数据

    5. 来自第1步的BroadcastReceiverServiceIntent传递给它,并使用事件总线让您的其余活动过程知道发生的一切,还处理活动过程中 nothing 为事件注册的情况(例如,如果所有活动都被销毁,则提出Notification