android c发广播,使用广播 Intent/广播接收器将消息从服务发送到 Activity_android-intent_开发99编程知识库...

,但你的问题还是模糊的。 所以,我将列出一系列的场景,并希望其中的一个能真正触及到你认为有问题的任何问题。

场景 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 中的就会被破坏。 活动不应该在后台做工作。 这项工作应该被委托给某种形式的服务,并且有一整套相关的场景,用于向服务发送广播。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值