第二章 BroadcastReceiver专题

一、广播接受是什么

BroadcastReceiver本质上是一个全局的监听器,用于监听系统全局的Android的四大组件之一。
(本质观察者模式)

二、广播的种类

1.无序广播

normal broadcast 优点:完全异步,同一时刻被所有接收者接收,处理效率高
缺点:接收者不能将处理结果传给下个个接受者,无法终止广播传送

2.有序广播

事先设置优先等级 标签中设置等级 -1000~1000,数值越大,等级越高,按照优先级顺序传送,可以将处理结果发送给下一个接收者


            
                
            

3.本地广播LocalBroadcastManager类

  • 使用它发送的广播将只在自身App内传播,因此你不必担心泄漏隐私数据
  • 其它App无法对你的App发送该广播,因为你的App根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用
  • 比系统的全局广播更加高效

1.注册广播

LocalBroadcastManager.getInstance(Context context).registerReceiver(BroadcastReceiver receiver, IntentFilter filter);

2.取消广播

LocalBroadcastManager.getInstance(this).unregisterReceiver(BroadcastReceiver receiver);

3.发送广播

LocalBroadcastManager.getInstance(Context context).sendBroadcast(Intent intent);

三、广播的注册

1.静态注册

  • 在AndroidManifest.xml文件中进行注册,静态注册是常驻型,应用程序关闭后,Receiver仍然可以接收到广播并且进行相应的处理
receiver android:name=".service.NoticeCancelBroadcastReceiver">
            
                
            

2.动态注册

  • 动态注册广播不是常驻型广播 ,可以跟随activity的生命周期。注意: 在activity结束前,移除广播接收器
// 注册网络状态监听
intentFilter = new IntentFilter();
intentFilter.addAction(BroadcastUtils.CONNECTIVITY_CHANGE);
registerReceiver(broadcastReceiver, intentFilter);

// 取消注册
 unregisterReceiver(broadcastReceiver);

3.动态注册于静态注册的区别

  • 动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低
  • 在同一个优先级下,谁先启动的快,谁将先接收到广播.

四、源码角度分析广播机制

1.本地广播的源码分析

https://blog.csdn.net/u010687392/article/details/49744579

2.系统广播源码分析

http://codemx.cn/2017/12/25/AndroidOS007-Broadcast2/

你可能感兴趣的:(第二章 BroadcastReceiver专题)