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屬性的話,先注冊的將先收到廣播。

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

這里接收短信的廣播是有序廣播,因此可以設置你自己的廣播接收器的級別高於系統原來的級別,就可以攔截短信,並且不存收件箱,也不會有來信提示音。

實現方法是:

<receiver android:name=".SmsReceiver">

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

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

   </intent-filter>

</receiver>

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM