android 廣播

關於廣播之前感受是隻知其一;不知其二的,此次看到同事整理的文檔,順帶跟着再參考幾篇博文也學習整理了下,先上個整理的圖
html

代碼模板

發送廣播

public static final String RECEIVE_ACTION = "com.demo.receive_action";
    public static final String RECEIVE_PERMISSION ="com.demo.receive_permission";

    Intent intent = new Intent();
    //設置Action
    intent.setAction(RECEIVE_ACTION);
    //添加附加信息
    intent.putExtra("msg", "我是普通廣播");
    //設置指定接送廣播的應用報名,能夠是其它應用包名字符串,這裏使用的是本身
    intent.setPackage(getPackageName());
    //發送廣播時指定權限,這裏的權限須要在使用方的manifest中經過形如
    // <uses-permission android:name="com.demo.receive_permission" />進行「使用聲明」
    sendBroadcast(intent, RECEIVE_PERMISSION);

靜態註冊

<!-- 聲明權限 -->
    <permission android:name="com.demo.receive_permission"/>

    <!--靜態註冊
    exported默認爲true,在這裏指定false,只接受應用內廣播-->
    <receiver
        android:name=".DynamicReceiver"
        android:enabled="true"
        android:exported="false"
        android:permission="com.demo.receive_permission">
        <intent-filter android:priority="100">
            <action android:name="com.demo.receive_action"/>
        </intent-filter>
    </receiver>

動態註冊

DynamicReceiver dynamicReceiver = new DynamicReceiver();

    IntentFilter dynamicFilter = new IntentFilter();
    //註冊廣播的Action
    dynamicFilter.addAction(RECEIVE_ACTION);
    //設置優先級
    dynamicFilter.setPriority(100);
    //註冊時設置權限
    registerReceiver(dynamicReceiver, dynamicFilter, RECEIVE_PERMISSION, null);

小結

消息通訊在Android上能夠用多種方式來實現,我以爲通常而言:android

若是是同一進程內跨線程的消息通訊能夠優先考慮使用RxBus和EventBus等框架(單例是進程內共享內存的);
若是是同一應用內跨進程的消息通訊能夠優先考慮使用support v4包中的LocalBroadcastManager,固然若是是使用順序或粘性等特殊廣播,就沒辦法使用LocalBroadcastManager了;
若是是跨應用的消息通訊纔會考慮使用BroadcastReceive組件。安全

相關知識內容連接

Android探索之BroadcastReceiver具體使用以及安全性探究
Android BroadcastReceiver介紹
LocalBroadcastManager 的實現原理
Android 自定義權限 框架

自啓動失敗緣由
BroadcastReceiver的原理和使用裏面有些注意事項講的比較細,好比動態註冊比靜態註冊優先級要高,onReceive函數原則不能超過10秒,不然會有ANR,函數

相關文章
相關標籤/搜索