在做android開發時,很多應用由於各種目的,希望在機器啟動時被喚醒,一般的做法是寫乙個broadcastreceiver,接收對應的boot action,當然別忘了在manifest中新增permission "android.permission.receive_boot_completed「。但是最近在做4.0開發時,有同事聲稱這個廣播接收不到了,同時其他有人又說自己的能接收到,到底是怎麼回事呢。
原來,在3.1之後,系統的package manager增加了對處於「stopped state」應用的管理,這個stopped和activity生命週期中的stop狀態是完全兩碼事,指的是安裝後從來沒有啟動過和被使用者手動強制停止的應用,與此同時系統增加了2個flag:flag_include_stopped_packages和flag_exclude_stopped_packages ,來標識乙個intent是否啟用處於「stopped state」的應用。當2個flag都不設定或者都進行設定的時候,採用的是flag_include_stopped_packages的效果。
有了上面的新機制之後,google覺得給所有的廣播intent預設加上flag_exclude_stopped_packages會非常的cooooool,能在一定程度上避免流氓軟體、病毒啊幹壞事,還能提高效率,就導致了本文題目中說的問題,receive_boot_completed廣播如果使用者沒有執行過應用,就不會響應了。
不過google還是留了點餘地,允許應用和後台服務通過給廣播intent設定flag_include_stopped_packages來喚醒處於「stopped state」的程式,也就是使用者自己寫的廣播intent可以控制這個機制,但是系統自帶的廣播intent,由於不能修改,就只能接受這個現實了。
在3.1的更新文件中,能夠找到上述修改的說明:
**:
android面試(4) Broadcast廣播篇
咱們繼續,今天覆習一下broadcast廣播的相關知識,老步驟,一步步來。1.概念 broadcast是一種廣泛運用於應用程式之間傳輸資訊的機制。從本質上來說,廣播內容就是乙個intent,在intent中攜帶資料。2.使用場景 3.種類 1 普通廣播 context.sendbroadcast 2...
PhoneGap3 1 Android環境搭建
下面簡單的介紹一下步驟 1 安裝node.js phonegap3中需要使用命令列環境,早phonegap中叫cli。而這個在windows中是基於node.js實現的。2 安裝phonegap 在命令列輸入npm install g cordova,然後等著它執行完成。在cmd中輸入cordova...
PhoneGap3 1 Android環境搭建
下面簡單的介紹一下步驟 1 安裝node.js phonegap3中需要使用命令列環境,早phonegap中叫cli。而這個在windows中是基於node.js實現的。2 安裝phonegap 在命令列輸入npm install g cordova,然後等著它執行完成。在cmd中輸入cordova...