Android只能動態注冊的廣播Action


只能動態注冊的廣播(部分):

android.intent.action.SCREEN_ON

android.intent.action.SCREEN_OFF

android.intent.action.BATTERY_CHANGED

android.intent.action.CONFIGURATION_CHANGED

android.intent.action.TIME_TICK

原因:

有以下幾種說法,提供給大家參考:

1.提高系統效率:這兩個事件是android的基本事件,如果大多數程序監聽,會大大的拖慢整個系統,所以android不鼓勵我們在后台監聽這兩個事件。

2.因為有序廣播的優先級問題。以上這些廣播中,靜態注冊時,系統的優先級大於應用,並且系統阻止了廣播的向下傳播。又因在Android 的廣播機制中,動態注冊的優先級是要高於靜態注冊優先級的。故用動態注冊代替靜態注冊。

3.系統安全問題。

 

解決方式(以android.intent.action.SCREEN_ON為例):

動態注冊不能放到activity中,因為動態注冊必須要在activity消亡的時候調用unregisterReceiver,會隨着activity的解鎖消失而不能再接收廣播。一般的辦法是在activity起來后馬上start一個service, 這個service里動態注冊一個broadcastreceiver,broadcastreceiver里接收到SCREEN_ON消息后啟動鎖屏activitty,  為了保證broadcastreceiver任何時候都可以接收到SCREEN_ON,service必須常駐在系統內,所以要接收開機消息android.intent.action.BOOT_COMPLETED。

 


免責聲明!

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



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