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