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

相關文章
相關標籤/搜索