在Android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,能够方便应用程序和系统、应用程序之间、应用程序内的通讯,因此对单个应用程序而言BroadcastReceiver是存在安全性问题的。 java
LocalBroadcastManager相对BroadcastReceiver,它只能用于应用内通讯,安全性更好,同时拥有更高的运行效率。也是须要发送应用内广播时的官方推荐。BroadcastReceiver 的通讯是走 Binder 机制的,而 LocalBroadcastManager 由于叫LocalBroadcast,可能让人产生一种它也是以 Binder 通信方式为底层实现的错觉,实际底层实现并不同,细看源码会发现是经过Handler来实现的。 安全
1. LocalBroadcastManager 使用LocalBroadcastManager 的使用跟通常 BroadcastReceiver 差异不大。 ide
(1).自定义 BroadcastReceiver 子类 spa
public class LocalBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { localMsg.setText(intent.getStringExtra(MSG_KEY)); } }
(2).注册接收器 设计
LocalBroadcastReceiver localReceiver = new LocalBroadcastReceiver(); LocalBroadcastManager.getInstance(context).registerReceiver(localReceiver, new IntentFilter(ACTION_LOCAL_SEND));
(3).发送广播 code
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(ACTION_LOCAL_SEND));
(4).取消注册 接口
LocalBroadcastManager.getInstance(context).unregisterReceiver(localReceiver);
2. LocalBroadcastManager 实现 get
(1).LocalBroadcastManager 的核心实现实际仍是 Handler,只是利用到了 IntentFilter 的 match 功能,至于 BroadcastReceiver 换成其余接口也无所谓,顺便利用了现成的类和概念而已; 源码
(2).由于是 Handler 实现的应用内的通讯,天然安全性更好,效率更高。 ast
3.LocalBroadcastManager好处
(1).发送的广播只会在本身App内传播,不会泄露给其余App,确保隐私数据不会泄露;
(2).其余App也没法向你的App发送该广播,不用担忧其余App会来搞破坏;
(3).比系统全局广播更加高效。