純粹是個人學(xué)習(xí)總結(jié),如有不對的地方請吐槽。
廣播有兩種注冊方式
靜態(tài)注冊:在AndroidManifest.xml 中注冊不依賴應(yīng)用程序,即應(yīng)用程序關(guān)閉后依然可以接受廣播,
動態(tài)注冊:在activity中注冊,必須在activity結(jié)束時注銷廣播
BroadcastReceiver 生命周期只有 10 秒左右,如果在 onReceive()內(nèi)做超過 10 秒內(nèi)的事情,就會報ANR(Application Not Response)程序無響應(yīng)的錯誤信息,每次接收廣播都會創(chuàng)建一個新的對象
有序廣播:
按照接收者聲明的優(yōu)先級別(聲明在intent-filter 元素的 android:priority 屬性中,數(shù)越大優(yōu)先級別越高,取值范圍:-1000 到 1000(其實最大可以為 int 最大值即:2147483647)。也可以調(diào)用 IntentFilter 對象的 setPriority()進行設(shè)置),被接收者依次接收廣播,前面的接收者有權(quán)終止廣播
Context.sendBroadcast()發(fā)送的是普通廣播,所有訂閱者都有機會獲得并進行處理。
Context.sendOrderedBroadcast()發(fā)送的是有序廣播
粘性廣播:
這個 api需要權(quán)限 android.Manifest.permission.BROADCAST_STICKY
粘性廣播的特點是 Intent 會一直保留到廣播事件結(jié)束,而這種廣播也沒有所謂的 10 秒限制
Context.sendStickyBroadcast()是發(fā)送粘性廣播
ordered 廣播(有序廣播):靜態(tài)接收器的優(yōu)先級》動態(tài)接收器的優(yōu)先級
非 ordered 廣播:動態(tài)接收器優(yōu)先級》靜態(tài)接收器優(yōu)先級