Android 8.0對隱式廣播的進一步限制

項目targetSdkVersion升級到26後,對應的的是Android O版本,即Android 8.0系統。經測試發現針對8.0及以上安卓版本手機,AndroidMainfest.xml中靜態註冊的廣播接收器失效,當App中對應intent filter類型廣播發出時,廣播接收器中的onReceive方法並未被系統回調。
 
且在Android Studio Logcat中,出現以下所示錯誤信息提示:

2018-12-20 17:34:55.588 749-767/system_process W/BroadcastQueue: Background execution not allowed: receiving Intent { act=com.corn.ui.setting.Action.TEST_BROADCAST flg=0x10 } to com.corn/.biz.setting.CornTestBroadcastReceiver
 
覈查Android官方文檔,Android 8.0系統,對後臺執行有進一步限制,包括對隱式廣播的限制。

對應Logcat中信息,搜索Android framework源碼,按Logcat中的日誌關鍵詞搜索到對應代碼位置。
這裏推薦使用 http://androidxref.com/
能夠選定Andrid版本,以及對應源碼項目等搜索項搜索。
 
 
上圖else if中條件,與官方文檔闡述一致,想要廣播發送繼續生效,可使此條件不知足便可。
對應的,通常能夠指定對應的廣播接收器Component,或對應的廣播接收器包名。
對應intent,經常使用的具體方法能夠是:intent.setClass()或intent.setComponent()或intent.setPackage()等寫法
 
進一步,官方文檔中指出了ACTION_PACKAGE_REPLACED 就是一種隱式廣播,而ACTION_MY_PACKAGE_REPLACED 則爲顯式廣播,能夠經過搜索代碼進一步覈實下,看看基本寫法是否與上述邏輯一致。
 
 
可見,源碼中寫法與上述分析一致。
相關文章
相關標籤/搜索