美文网首页
四大组件 —— BroadcastReceiver

四大组件 —— BroadcastReceiver

作者: leap_ | 来源:发表于2020-04-30 17:13 被阅读0次

AS入门(九) 组件篇之Broadcast Receiver
Android四大组件:BroadcastReceiver史上最全面解析

作用:

监听应用发出的广播,做出响应,不同App之间,系统应用的通信

广播的种类:

  • 普通广播:普通广播发出后,会同时发送给所有的广播接收器,不可以被拦截


    普通广播
  • 有序广播:有序广播发送后,在同一时刻只会被一个接收器接收,会根据接收器的优先级决定谁先接收,可以被拦截,拦截后后续的接收器将无法收到


    有序广播
特殊广播:
  1. 本地广播:只能被当前app接收,解决全局广播的安全性问题
  2. 粘性广播sticky:广播会滞留直到可以接收的接收器被注册(类似EventBus的粘性事件)已废弃
  3. 系统广播:Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广播

实现原理:

基于观察者模式:被观察者(广播发送方) 通知观察者(广播接收方)做出响应;

  1. 广播接收者通过Binder在AMS中注册
  2. 广播发送方通过Binder将广播发送给AMS
  3. AMS根据广播的intentFilter选择合适的广播接收者,回调onReceive()

广播接收器注册:

  1. 静态注册:在AndroidManifest.xml里通过标签声明
    特点:不受生命周期影响,程序关闭后任然有效,耗内存,耗电
  1. 动态注册:在代码中通过Context.registerReceiver()注册
    特点:跟随组件的生命周期变化
两种方式的对比

广播的发送:

1.普通广播
Intent intent = new Intent();
//对应BroadcastReceiver中intentFilter的action
intent.setAction(BROADCAST_ACTION);
//发送广播
sendBroadcast(intent);
2. 有序广播
sendOrderedBroadcast(intent);
3. 本地广播
  • 将exported属性设置为false
  • 通过intent.setPackage(packageName)指定报名
  • 使用LocalBroadcastManager发送(本地广播接收器只能通过LocalBroadcastManager动态注册)
//注册应用内广播接收器
//步骤1:实例化BroadcastReceiver子类 & IntentFilter mBroadcastReceiver 
mBroadcastReceiver = new mBroadcastReceiver(); 

//步骤2:实例化LocalBroadcastManager的实例
localBroadcastManager = LocalBroadcastManager.getInstance(this);

//步骤3:设置接收广播的类型 
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);

//步骤4:调用LocalBroadcastManager单一实例的registerReceiver()方法进行动态注册 
localBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);

//发送应用内广播
Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION);
localBroadcastManager.sendBroadcast(intent);

//取消注册应用内广播接收器
localBroadcastManager.unregisterReceiver(mBroadcastReceiver);

注意点:

  • 动态注册的广播需要手动注销
  • 不允许重复注册,重复注销
  • onResume()注册,onPause()注销,因为activity在销毁前一定会执行Pause;
  • 接收器的onReceive()是UI线程,不可以进行耗时操作
  • 不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的;

相关文章

网友评论

      本文标题:四大组件 —— BroadcastReceiver

      本文链接:https://www.haomeiwen.com/subject/xzacphtx.html