BroadcastReceiver學(xué)習(xí)筆記

BroadcastReceiver本質(zhì)是一種全局監(jiān)聽器,它可以監(jiān)聽全局的廣播消息。

與Activity和Service不同的是,BroadcastReceiver在接收到匹配的Intent前并不會(huì)被激活。激活一個(gè)BroadcastReceiver需要以下步驟:

  1. 創(chuàng)建一個(gè)匹配的Intent
  2. 調(diào)用Context的sendBroadcast() 或 sendOrderedBroadcast()

當(dāng)Context發(fā)出通知后,所有匹配該Intent的BroadcastReceiver都可能被啟動(dòng)。

要實(shí)現(xiàn)一個(gè)BroadcastReceiver,只需重寫它的onReceive方法,同時(shí)注冊(cè)到程序中。
有兩種方式注冊(cè)BroadcastReceiver:

  1. 在AndroidManifest.xml中注冊(cè):
<receiver android:name="...">
    <intent-filter>
        <action android:name="...." />
    </intent-filter>
</receiver>
  1. 在程序中注冊(cè)
IntentFilter filter = new IntentFilter("...");
Receiver receiver = new Receiver();
registerReceiver(receiver, filter);

當(dāng)對(duì)應(yīng)的廣播發(fā)出后,系統(tǒng)就會(huì)創(chuàng)建對(duì)應(yīng)的BroadcastReceiver實(shí)例,并調(diào)用它的onReceive方法,該方法執(zhí)行完后,實(shí)例就會(huì)被銷毀。如果onReceive不能在10秒內(nèi)執(zhí)行完成,會(huì)觸發(fā)ANR。若要執(zhí)行耗時(shí)操作,可以啟動(dòng)一個(gè)Service,不應(yīng)啟動(dòng)新線程,很可能線程沒執(zhí)行完,BroadcastReceiver就已經(jīng)退出了。

廣播

廣播有兩種:

  • Normal Broadcast 普通廣播:可以被所有對(duì)應(yīng)的接收者接收到,缺點(diǎn)是不能鏈?zhǔn)絺鬟f且無法終止傳播。

  • Ordered Broadcast 有序廣播:按預(yù)設(shè)的優(yōu)先級(jí)(-1000 ~ 1000)依次被接收。上一接收者可以調(diào)用setResultExtras(Bundle)將數(shù)據(jù)存入Broadcast,下一接受者可以調(diào)用getResultExtras()將數(shù)據(jù)取出。有序廣播可以被接收者終止,優(yōu)先級(jí)低的接收者將不會(huì)接收到該廣播。

同樣優(yōu)先級(jí)有兩種設(shè)置方式:

  1. AndroidManifest.xml:
<receiver android:name="...">
    <intent-filter android:priority="0">
  1. 代碼中:
intentFilter.setPriority(1000);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容