對于android的廣播機(jī)制一直不是特別清楚坠非,今日就來聊聊他到底有啥昔头!
1涨薪、分類
android廣播接收器(BroadcastReceiver)可以分為2大類
標(biāo)準(zhǔn)廣播:是完全異步執(zhí)行的廣播辈赋,小二理解為發(fā)散的那種慌烧,效率高逐抑,不可以攔截,沒有順序屹蚊,各個廣播接收器可以同時接收到厕氨。
有序廣播:是一種同步執(zhí)行的廣播,是有先后順尋的汹粤,直線似的命斧,可以攔截。優(yōu)先級高的就可以優(yōu)先收到消息嘱兼。
2国葬、注冊
android四大組件都需要注冊,只有廣播有兩種注冊方式(動態(tài)代碼注冊芹壕,靜態(tài)在AndroidManifest.xml中注冊)汇四,其他三個在AndroidManifest.xml靜態(tài)注冊。
3踢涌、創(chuàng)建廣播接收器
如何創(chuàng)建廣播接收器通孽?
需要新建一個類,讓他繼承BroadcastReceiver,并且需要重寫onReceive()方法睁壁。有廣播到來時利虫,onReceive()方法就會執(zhí)行挨厚,具體的邏輯可以再該方法中處理。
3糠惫、例子--實(shí)現(xiàn)一個檢測網(wǎng)絡(luò)變化發(fā)出的廣播(動態(tài)注冊實(shí)例)
廣播接收類
classNetworkChangeReceicerextendsBroadcastReceiver {
@Override
public voidonReceive(Context context,Intent intent) {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info !=null&& info.isAvailable()) {
Toast.makeText(context,"網(wǎng)絡(luò)可用疫剃,請繼續(xù)!",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context,"網(wǎng)絡(luò)不可用,請檢查網(wǎng)絡(luò)!",Toast.LENGTH_LONG).show();
}
}
}
接下來需要在活動onCreate()方法中硼讽,創(chuàng)建一個IntentFilter的實(shí)例巢价,給他添加一個action("android.net.conn.CONNECTIVITY_CHANGE")的值,
創(chuàng)建廣播接收器的類的實(shí)例固阁,然后調(diào)用
registerReceiver(receicer,filter)進(jìn)行注冊壤躲。
這樣就可以了,記得需要在onDestriy()方法中調(diào)用unregisterReceiver(receicer);來取消注冊的廣播备燃。
因?yàn)閯討B(tài)注冊的廣播接收器一定都要取消才可以碉克。