前言
代碼優化過程中發現好多app的全局網絡監聽使用動态注冊廣播方式,而沒有采用在清單檔案中進行注冊
産生了疑問,研究開來知識點還是有一些。總結如下
1.廣播的注冊方式
在Android中有兩種方式,即動态注冊(代碼注冊)、靜态注冊(清單檔案注冊)
靜态:
<receiver android:name=".persenter.reciver.InternetStaticBroadCastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
動态:
private void registerReceiver(BroadcastReceiver bc, String action) {
IntentFilter mFilter = new IntentFilter();
mFilter.addAction(action);
context.registerReceiver(bc, mFilter);
}
反注冊
unregisterReceiver(BroadcastReceiver);
2.廣播注冊方式優缺點
靜态注冊廣播
1.優先級低于動态廣播
2.注冊後一直運作,盡管Activity、程序、App被殺死還是可以接收到廣播
(官網解釋:從Android的源代碼中找到了這樣的注釋:If this BroadcastReceiver was launched through a
tag, then the object is no longer alive after returning from this function.
This means you should not perform any operations that return a result to you asynchronously.
這段文字告訴我們:如果通過标簽來注冊的BroadcastReceiver,
那麼該對象的執行個體在onReceive被調用之後就會在任意時間内被銷毀。也就是說,我們并需要擔心靜态注冊的BroadcastReceiver的銷毀問題。)
3.廣播注冊到系統廣播隊列。受到全局廣播影響。
動态廣播
1.優先級高于靜态廣播
2.可以随意控制廣播的建立和銷毀
3.自由,靈活度較高
4.app内注冊的廣播,對系統廣播進行隔離。作用域在app内
3、Broadcast Receiver的使用場景
同一App具有多個程序的不同元件之間的消息通信(發送廣播吊起撥打電話,contentprivader)
不同App之間的元件之間的消息通信
4、Broadcast Receiver的種類
普通廣播
有序廣播
本地廣播
Sticky廣播
5、LocalBroadcastManager特點
本地廣播隻能在自身App内傳播,不必擔心洩漏隐私資料
本地廣播不允許其他App對你的App發送該廣播,不必擔心安全漏洞被利用
本地廣播比全局廣播更高效
以上三點都是源于其内部是用Handler實作的
6、Android中跨程序通訊的幾種方式
通路其他應用程式的Activity,如調用系統通話應用
Content Provider,如如通路系統相冊
廣播,如顯示系統時間
AIDL