標準廣播和有序廣播
標準廣播大致是這樣的流程,發送之後,所有的廣播接收器同時接收到
有序廣播大致是這樣,中間的一次接受廣播,中間的接收器,接收之後,可以選擇繼續往下傳播或者截斷兩者的編碼區別在於:
1.發送廣播的時候 標準廣播(sendBroadcast(intent)) 有序廣播(sendOrderedBroadcast(intent,null))
2.有序廣播在intent-filter中可設置android:priority=”n” n越大優先級越大 別問我一樣大會怎樣,我沒試過 捂臉
3.有序廣播可想傳播鏈截斷(abortBroadcast()),截斷之後不可繼續下傳
廣播接收器的靜態註冊和動態註冊
註冊之前需要先創建一個接收器,也就是自定義一個;
as裏面,左鍵選中java文件夾,右鍵菜單裏面的new–>other,裏面可以直接創建接收器(Broadcast Receiver),完美生成一個廣播接收器,當然你也可以自己新建個object,在extends BroadcastReceiver ,再添加onReceive()方法函數,當然,我感覺這樣真的是很麻煩,但是如果你真的是基礎不行的話,可以做兩遍,浪浪靜態註冊就是在清單文件裏註冊,這個廣播的生命週期是隨着應用的啓動和銷燬而啓動銷燬的,
<receiver android:name=".MyReceiver" android:enabled="true" //是否啓用這個廣播 android:exported="true" //是否接受本程序之廣播 ></receiver>
android:enabled=”true” //是否啓用這個廣播
android:exported=”true” //是否接受本程序之廣播 一般來講如果不是接受系統的廣播,不需要暴露,否則可能導致安全的操作,被別人破解
可以添加intent-filter action類似之前activity的
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.hehehe" />
</intent-filter>
</receiver>
廣播先創建,再註冊,做完之後我們就可以發送廣播驗證一下
Intent intent=new Intent("android.intent.action.hehehe");
sendBroadcast(intent);
動態註冊 還是需要先創建 BroadcastReceiver ,假如是使用as自動創建的話,是會自動靜態註冊的,
注意英文提示,add到manifest,假如是中文的話,我各個開發工具肯定提高我不少的開銷效率,但是真的下漢化版的,反而會被廣大同行,瞧不起,太 low,我也有這樣的感覺,崇洋媚外啊,我也是
一般情況下都是在activity生命週期中註冊,當然其他組件也可以,
public class MainActivity extends AppCompatActivity {
private MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.hehehe");
registerReceiver(myReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}
這就是動態註冊,發送廣播驗證一下,ok
本地廣播
LocalBroadcastManager 本地廣播,就和其他應用沒關係了,他們都接受不到,也發送不過來
具體的編碼需要注意的地方也就是,編碼的發送廣播,註冊廣播,銷燬廣播的時候,使用LocalBroadcastManager調用