最近項目需要對電池電量的變化進(jìn)行監(jiān)聽受神,最初在Activity測試沒有問題担钮,后來在Manifest.xml文件中靜態(tài)注冊刀脏,結(jié)果竟然接收不到電池電量的廣播止吐。~~~~~
后來在網(wǎng)上搜索發(fā)現(xiàn)系統(tǒng)有五個不能靜態(tài)注冊的廣播蚪腐,這里記錄一下:
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.提高系統(tǒng)效率:這兩個事件是android的基本事件,如果大多數(shù)程序監(jiān)聽回季,會大大的拖慢整個系統(tǒng)家制,所以android不鼓勵我們在后臺監(jiān)聽這兩個事件。
2.因為有序廣播的優(yōu)先級問題泡一。以上這些廣播中颤殴,靜態(tài)注冊時,系統(tǒng)的優(yōu)先級大于應(yīng)用鼻忠,并且系統(tǒng)阻止了廣播的向下傳播涵但。又因在Android 的廣播機(jī)制中,動態(tài)注冊的優(yōu)先級是要高于靜態(tài)注冊優(yōu)先級的粥烁。故用動態(tài)注冊代替靜態(tài)注冊贤笆。
3.系統(tǒng)安全問題。
解決方法:
動態(tài)注冊不能放在Activity中讨阻,因為在Activity中注冊Activity銷毀時要調(diào)用unregisterReceiver芥永,隨著Activity的銷毀不能再接收到廣播,因此我把動態(tài)注冊放在Application中钝吮,或者是在service中動態(tài)注冊埋涧。