只能動態注冊的廣播(部分):
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。