Android碎碎念 -- 广播LocalBroadcastManager的实现

      在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).比系统全局广播更加高效。

相关文章
相关标签/搜索