天天看點

android 靜态、動态注冊廣播淺析

前言

代碼優化過程中發現好多app的全局網絡監聽使用動态注冊廣播方式,而沒有采用在清單檔案中進行注冊

産生了疑問,研究開來知識點還是有一些。總結如下

android 靜态、動态注冊廣播淺析

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

總結: