第二章 BroadcastReceiver专题
2018-12-21 本文已影响0人
唔笛plk
一、广播接受是什么
BroadcastReceiver本质上是一个全局的监听器,用于监听系统全局的Android的四大组件之一。
(本质观察者模式)
二、广播的种类
1.无序广播
normal broadcast 优点:完全异步,同一时刻被所有接收者接收,处理效率高
缺点:接收者不能将处理结果传给下个个接受者,无法终止广播传送
2.有序广播
事先设置优先等级 <intent-filter>标签中设置等级 -1000~1000,数值越大,等级越高,按照优先级顺序传送,可以将处理结果发送给下一个接收者
<receiver android:name=".service.NoticeCancelBroadcastReceiver">
<intent-filter android:priority="100">
<action android:name="notice_cancel" />
</intent-filter>
</receiver>
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">
<intent-filter android:priority="100">
<action android:name="notice_cancel" />
</intent-filter>
</receiver>
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