,但你的问题还是模糊的。 所以,我将列出一系列的场景,并希望其中的一个能真正触及到你认为有问题的任何问题。
场景 A: 仅 Activity
如果你只需要收到广播在前台,当你有一个 Activity Activity BroadcastReceiver 使用 registerReceiver() 登记。 如 @MisterSquonk 所示,你将在 onResume() 中注册接收器并在 onPause() 中注册它。
场景 B: Activity 如果在前景,或者其他;有序广播
如果希望前台 Activity 处理广播,但如果 Activity 不在前台( 比如,提升一个 Notification ) 中,并且广播是一个有序广播( 比如,传入短信),那么你仍然需要使用方案,但使用 higher-priority IntentFilter ( 查看 setPriority() ) 。 此外,你还可以通过 BroadcastReceiver 中的 元素注册一个,并为同一个广播使用 lower-priority 。 消费的BroadcastReceiver Activity, 叫 abortBroadcast() 事件,防止它达到 manifest-registered BroadcastReceiver 。
场景 C: Activity 如果在前台,则为其他;常规广播
如果场景B 几乎匹配,但你正在侦听的广播不是一个有序广播,你需要从场景开始。 但是,使用一个私有动作字符串作为 @MisterSquonk,广播中两个接收器拥有的广播是你自己的。 此外,另一个 BroadcastReceiver 注册清单中的,是谁的 真正的广播监听。 接收器将简单地调用 sendOrderedBroadcast() 发送其他接收器正在监听的有序广播。
场景 D: Activity 无论前景如何
如果你的一些 Activity 需要知道广播,并且它是否在前台,你需要重新考虑你的意思。 通常,这真的意味着广播以某种方式影响你的数据模型,在这种情况下,你的关心不是应该让知道的活动,而是要更新你的数据模型,并使用你的already-existing"让活动了解数据模型更改"逻辑处理。
但是,如果你确信这不是数据模型的一部分,那么你可以实现场景B 或者场景C,并在静态数据成员中添加一些信息。 你的活动可以检查 onResume() 中的静态数据成员,以便在返回到前台时获取有关广播的信息。
如果你认为"但是,如果我的进程在广播和其他即将到达前台的Activity 之间终止",那么你的广播真正的是更新你的数据模型,每一个打开的段落的数据模型。
如果你在思考"但是,我想更新一个在后台工作的Activity",那么 Activity 中的就会被破坏。 活动不应该在后台做工作。 这项工作应该被委托给某种形式的服务,并且有一整套相关的场景,用于向服务发送广播。