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