Android BroadcastReceiver 廣播總結

靜態/動態註冊廣播的區別,靜態動態廣播區別


廣播接收器註冊一共有兩種形式 : 靜態註冊和動態註冊.

兩者及其接收廣播的區別:

1.動態註冊的廣播永遠要快於靜態註冊的廣播,不管靜態註冊的優先級設置的多高,不管動態註冊的優先級有多低>\

2.動態註冊廣播不是常駐型廣播,也就是說廣播跟隨activity的生命週期。注意: 在activity結束前,移除廣播接收器。

 靜態註冊是常駐型,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。

3.在同一個優先級下,誰先啓動的快,誰將先接收到廣播.



廣播分爲:有序廣播、無序廣播(普通廣播)、粘性廣播


無序廣播(普通廣播):

  • 普通廣播是通過sendBroadcast來發送的;
  • 普通廣播是完全異步的,接受器收到廣播的順序是無法確定的,接受器也無法中止該廣播。


有序廣播:
  • 有序廣播是通過Context.sendOrderedBroadcast來發送;
  • 有序廣播的優先級可以設置屬性android:priority/setPriority(),數越大優先級別越高,取值範圍:-1000 到 1000(其實最大可以爲 int 最大值即:2147483647/2的31次方減1);
  • 廣播最先發送到優先級高的接受器那裏;
  • 優先級高的接受器可以決定是否繼續傳遞廣播,可以使用abortBroadcast函數,丟棄該廣播;
  • 可以使用setResult系列函數將結果傳給下一個BroadcastReceiver,通過getResult系列函數來取得上個BroadcastReceiver返回的結果;




短信廣播屬於有序廣播。


廣播的優先級:

  • 優先級設置高的高於低優先級的。 
  • 動態註冊的廣播優先級高於靜態註冊。
  • 動態註冊的優先級相同的廣播,先註冊的高於後註冊的。
  • 靜態註冊的優先級相同的廣播,先安裝的高於後安裝的,其次取決於Sting [] apps = new File(/system/app/).list();的排序。


示例:
假設有如下優先級的 5 個接收器
1.動態 A(優先級=1)
2.動態 B(優先級=2)
3.動態 C(優先級=2)
4.靜態 D(優先級=1)
5.靜態 E(優先級=2)
並且 B 先於 C 註冊
那麼實際接收順序應爲
B C E A D
也就是說,如果靜態接收器的優先級高於動態接收器的優先級,那麼還是靜態接收器先接收到廣播(比如接收 SMS 廣播)


參考資料:

http://www.bkjia.com/Androidjc/863165.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章