Android廣播中有序和無序的區別

BroadcastReceiver所對應的廣播分兩類:普通廣播有序廣播
普通廣播:經過Context.sendBroadcast()方法來發送,它是徹底異步的。
全部的receivers(接收器)的執行順序不肯定,所以全部的receivers(接收器)接收broadcast的順序不肯定。
這種方式效率更高,可是BroadcastReceiver沒法使用setResult系列、getResult系列abort(停止)系列API
有序廣播:是經過Context.sendOrderedBroadcast來發送,全部的receiver依次執行。
BroadcastReceiver能夠使用setResult系列函數結果傳給下一個BroadcastReceiver,經過getResult系列函數來取得上個BroadcastReceiver返回的結果,並能夠abort系列函數來讓系統丟棄該廣播,使用該廣播再也不傳送到別的BroadcastReceiver
能夠經過在intent-filter中設置android:priority屬性來設置receiver的優先級,優先級相同的receiver其執行順序不肯定。
若是BroadcastReceiver是代碼中註冊的話,且其intent-filter擁有相同android:priority屬性的話,先註冊的將先收到廣播。

有序廣播,即從優先級別最高的廣播接收器開始接收,接收完了若是沒有丟棄,就下傳給下一個次高優先級別的廣播接收器進行處理,依次類推,直到最後。若是多個應用程序設置的優先級別相同,則誰先註冊的廣播,誰就能夠優先接收到廣播。android

這裏接收短信的廣播是有序廣播,所以能夠設置你本身的廣播接收器的級別高於系統原來的級別,就能夠攔截短信,而且不存收件箱,也不會有來信提示音。web

實現方法是:異步

<receiver android:name=".SmsReceiver">    ide

  <intent-filter android:priority="100">     函數

    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>                        post

  </intent-filter> spa

</receiver>orm

裏面的android:priority="100"就是設定廣播接收器的級別,這個值從1000~-1000,數值越大,優先級別就越高。blog

相關文章
相關標籤/搜索