(1)Android5.0/APIlevel 21開始粘滯廣播和有序粘滯廣播過期,以后不再建議使用;
(2)靜態注冊的廣播接收器即使app已經退出,主要有相應的廣播發出,依然可以接收到,但此種描述自Android3.1開始有可能不再成立。
主要原因如下:
Android 3.1開始系統在Intent與廣播相關的flag增加了參數,分別是
FLAG_INCLUDE_STOPPED_PACKAGES:包含已經停止的包(停止:即包所在的進程已經退出)
FLAG_EXCLUDE_STOPPED_PACKAGES:不包含已經停止的包
自Android3.1開始,系統本身則增加了對所有app當前是否處于運行狀態的跟蹤。在發送廣播時,不管是什么廣播類型,系統默認直接增加了值為FLAG_EXCLUDE_STOPPED_PACKAGES的flag,導致即使是靜態注冊的廣播接收器,對于其所在進程已經退出的app,同樣無法接收到廣播。
(詳情參加Android官方文檔:
http://developer.android.com/about/versions/android-3.1.html#launchcontrols)
對于系統廣播,由于是系統內部直接發出,無法更改此intent flag值,因此,Android3.1開始對于靜態注冊的接收系統廣播的BroadcastReceiver,如果App進程已經退出,將不能接收到廣播。
但是對于自定義的廣播,可以通過復寫此flag為FLAG_INCLUDE_STOPPED_PACKAGES,使得靜態注冊的BroadcastReceiver,即使所在App進程已經退出,也能能接收到廣播,并會啟動應用進程,但此時的BroadcastReceiver是重新新建的。
在Android3.1以前,不少App可能通過靜態注冊方式監聽各種系統廣播,以此進行一些業務上的處理(如即時App已經退出,仍然能接收到,可以啟動service等..),Android3.1后,靜態注冊接受廣播方式的改變,將直接導致此類方案不再可行。
通過將Service與App本身設置成不同的進程已經成為實現此類需求的可行替代方案。
(轉自;?http://www.cnblogs.com/lwbqqyumidi/p/4168017.html)