一训枢、廣播類型
標(biāo)準(zhǔn)廣播:
是一種完全異步執(zhí)行的廣播,在廣播發(fā)出后挺勿,所有廣播接收器幾乎在同一時(shí)間接收到這條廣播消息。他們之間沒有任何先后順序喂柒。這種廣播小綠本比較高不瓶,但它無法被截?cái)唷?/p>
有序廣播:
是一種同步執(zhí)行的廣播,在廣播發(fā)出后灾杰,同一時(shí)刻只會有一個(gè)廣播接收器能夠接收到這條廣播消息蚊丐,當(dāng)這個(gè)廣播接收器中的邏輯執(zhí)行完成之后,廣播才會繼續(xù)傳遞消息艳吠。這種廣播有先后順序麦备,優(yōu)先級高的廣播接收器先接收到廣播消息,并且前面的廣播接收器還可以截?cái)嗾趥鬟f的廣播昭娩。
二凛篙、接受系統(tǒng)廣播
接收廣播需要用到廣播接收器。廣播接收器可以自由的對自己感興趣的廣播進(jìn)行注冊栏渺,當(dāng)對應(yīng)的廣播發(fā)出時(shí)呛梆,廣播接收器就能后接受到該廣播,并在內(nèi)部處理相應(yīng)的邏輯磕诊。廣播接收器分兩種注冊方式:在代碼中注冊為動態(tài)注冊填物;在AndroidManifest中注冊是靜態(tài)注冊。
動態(tài)注冊的demo:
MyBroadcastReceiver繼承于BroadcastReceiver秀仲,重寫了onReceive()方法融痛,當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí)壶笼,這個(gè)onReceive方法就會被執(zhí)行神僵。在onCreate方法中創(chuàng)建了一個(gè)IntentFilter實(shí)例,添加了一個(gè)值為android.net.conn.CONNECTIVITY_CHANGE的action覆劈。接下來建了一個(gè)MyBroadcastReceiver的實(shí)例保礼,然后調(diào)用registerReceiver注冊這個(gè)廣播,把intentFilter和BroadcastReceiver兩個(gè)實(shí)例都穿進(jìn)去责语,這樣MyBroadcastReceiver會接受到所有值為android.net.conn.CONNECTIVITY_CHANGE的廣播 炮障。android.net.conn.CONNECTIVITY_CHANGE這個(gè)值是系統(tǒng)用于檢測網(wǎng)絡(luò)變化的。另外動態(tài)注冊的廣播都要取消注冊坤候,在onDestroy方法中調(diào)unregisterReceiver()方法實(shí)現(xiàn)胁赢。在運(yùn)行時(shí)候會遇到權(quán)限問題,因?yàn)锳ndroid中很多操作都需要聲明權(quán)限才能進(jìn)行白筹。需要在AndroidManifest中聲明這個(gè)權(quán)限:<uses-permission android:name="andorid.permission.ACCESS_NETWORK_STATE"/>用手機(jī)去測試就可以智末,每次發(fā)生網(wǎng)絡(luò)變化時(shí)谅摄,就會彈出一個(gè)toast。
靜態(tài)廣播:
利用Android Studio直接new一個(gè)broadcast系馆,AndroidManifest中會自動生成Receiver對應(yīng)的結(jié)構(gòu)送漠。然后在Receiver結(jié)構(gòu)中添加廣播的接收廣播的關(guān)鍵字
<intent-fliter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-fliter>
就完成了靜態(tài)廣播的注冊。mainActivity中的代碼進(jìn)行細(xì)微調(diào)整就可以由蘑。"BOOT_COMPLETED"這個(gè)關(guān)鍵字是系統(tǒng)開機(jī)啟動完成發(fā)出的系統(tǒng)廣播闽寡。
自定義廣播:
自定義廣在注冊是的關(guān)鍵字是自己隨機(jī)定義的,在代碼上的展示就是:
標(biāo)準(zhǔn)廣播:<action android:name="自定義"/>
在onCreat方法中:
Intent intent =new Intent("自定義");
startBroadcast(intent);
有序廣播的區(qū)別在發(fā)送發(fā)送時(shí)區(qū)別就是startOrderBroadcast(intent);決定廣告接收順序的在廣播注冊時(shí)候的屬性條目? android:priority="100"尼酿。在一個(gè)activity中接收到這個(gè)廣播以后不想讓它繼續(xù)傳遞的話爷狈,只需要在onReceive方法的末尾添加 abortBroadcast();
本地廣播
和普通廣播的區(qū)別不大需要額外聲明一個(gè)localBroadcastManager來發(fā)送廣播。本地廣播只能本地接收裳擎。
廣播差不多就這么用淆院,比較簡單