Android四大组件之Broadcast Receiver(广播)


  1. 请描述一下BroadcastReceiver
  • BroadCastReceiver是Android四大组件之一,主要用于接收系统或者app发送的广播事件。
  • 广播分为两种:有序/无序广播
  • 内部通信实现的机制:通过Android系统的Binder机制实现通信。
  • 无序广播:完全异步,逻辑上可以被任何的广播接受者收到,优点是效率高,缺点是一个接收者不能将处理的结果传递给下一个接受者,并无法终止广播intent的传播。
  • 有序广播:按照被接受者的优先级顺序,在被接受者中依次传播,比如有三个广播接受者A,B,C,优先级别是A>B>C,那么消息先传给A,然后在传给B,最后传给C,每个接受者有权终止广播,比如B终止广播,C就无法接收到,此外A接收到的广播后可以对结果对象进行操作,当广播传给B时,B可以从结果对象中取得A存入的数据;
  • 在通过Context.sendOrderedBroadcast(intent,receviePermission,resultReceiver,scheduler,initialCode,initialData,initialExtras)时我们指定resultReceiver广播接收者,这个接收者我们可以认为是最终的接收者,通常情况下如果比他们的优先级更高的接收者如果没有终止广播,那么他的onReceive会被执行两次,第一次是正常的按照优先级顺序执行,第二次是作为最终接收者接收,如果比他优先级高的接收者终止了广播,那么他依然能接收到广播。
  • 项目中常使用广播接收者接收系统通知,比如开机启动,sd挂载,低电量,锁屏等。
  1. 在manifest和代码中如何注册和使用Broadcast Receiver
  • 在清单文件中注册广播接收者称为静态注册,在代码中注册称为动态注册。静态注册的广播接收者只要app在系统中运行则一直可以接收到广播消息,动态注册的广播接收者当注册的Activity或Service销毁了那么就接收不到广播了。
  • 静态注册:在清单文件中进行配置
<receiver android:name =".BroadcastReceiver"
<intent-filter>
<action android:name="android.intnet.action.CALL">
</action>
</intent-filter>
</receiver>
  • 动态注册:在代码中注册
receiver = new BroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(CALL_ACTION);
context.registerReceiver(receiver,intentFilter);
  1. BroadcastReceiver的生命周期
  • 广播接受者的生命周期非常短暂,在接收广播的时候创建,onReceive()方法结束之后销毁;
  • 广播接受者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框;
  • 最好也不要再广播接收者中创建子线程做耗时的操作,因为广播接受者被销毁后进程就成为了空进程,很容易被系统杀掉;
  • 耗时的,较长的工作最好放在服务中完成;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值