Android中不能靜態註冊的廣播

2021-07-24 17:16:25 字數 1186 閱讀 1527

android中不能靜態註冊的廣播有:

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。

源**:

public void oncreate()

public int onstartcommand(intent intent , int flags , int startid)

public void ondestroy()

//螢幕變暗/變亮的廣播 , 我們要呼叫keyguardmanager類相應方法去解除螢幕鎖定

private broadcastreceiver mscreenoffreceiver = new broadcastreceiver()

}

Android 靜態註冊廣播收不到

一 問題現象 在進行android開發的時候,有多種方式和第三方應用進行通訊,常見的有aidl service receiver content provider等,這不,最近為了省事使用了廣播和第三方應用進行通訊,但是發現乙個問題,對方偶發收不到廣播,開始懷疑對方是不是動態註冊了廣播,和對方的開發...

Oracle中靜態註冊監聽的問題

問題描述 用asp.net基於oracle寫的bs web應用程式,出現乙個困擾很久的問題,就是過一段時間就會莫名其妙地出現無法連線資料庫的問題。可是直接通過sqlplus本地連線又是可以的。只能是重啟oracle開頭的所有服務,連線成功。查詢原因 剛開始以為是程式的問題,資料庫開了沒關,查詢了很久...

動態註冊和靜態註冊的區別

動態註冊的廣播會受activity的生命週期的影響,當activity銷毀的時候,廣播就失效了。而靜態註冊的廣播,即使activity銷毀了,仍然可以收到廣播。更牛掰的是即使殺死程序,仍然可以收到廣播。動態註冊的廣播要想一直監聽可以註冊到server裡面區監聽 public class update...