如何能讓我們的應用能夠在系統後台持續地執行是乙個自android從娘胎裡出來時就議論不停的話題,而且這似乎成了乙個牛(liu)逼(mang)應用標配的功能。每當有人問起愛哥這個沉重的問題時我都會選擇避而不答,原因有二,一是我並不曾深入地研究過相關功能,二是本人作為乙個有情懷的開發者是不提倡讓應用去占用沒必要且吃緊的系統資源。不過最近乙個偶然的機會讓我不得不去正視這個問題,那就是在android中乙個應用是否真的能常駐後台呢?這裡愛哥可以先給出答案:可以但又不可以。很多朋友看到這裡一定會暗罵愛哥「你這特麼不是廢話麼」?先表急,等你看完這篇文章後就知道這句話的真(dou)諦(bi)。
什麼才叫後台常駐
大家對應用後台常駐比較普遍的理解是當應用位於後台時不被乾掉,退一步說應用位於後台時被乾掉後依然能頑強地重新啟動起來,這裡的被乾掉也可以簡略地分為兩種情況,第一種是當系統資源緊俏的時候or基於某種系統自身的後台執行規則選擇乾掉你的後台應用來獲得更多的資源,第二種是使用者手動呼叫某些安全軟體的清理功能乾掉你的後台應用。對於android 5.0以前的系統我們可以考慮以上兩種情況下的後台常駐,而對於android 5.0以及以後的版本我們只能基於第一種情況考慮後台常駐,因為從android 5.0開始對程序的管理更為嚴格,啥得也更為暴力。
android是如何乾掉你應用的
要想讓應用後台常駐我們還必須先了解一點,那就是android是如何乾掉你的應用的,所謂知己知彼才能百戰百勝。上面我們曾提到android殺應用實質上是殺程序,正常情況下,每乙個android應用啟動後都會對應乙個程序,我們可以在adb shell中通過ps命令檢視:
adb shell上述方法意思是列出條目裡含有aigestudio字元的程序:ps|grep aigestudio
u0_a68 1202 340 712072 42936 ep_poll f73940c5 s com.aigestudio.daemon可以看到當我們的應用執行後android會為我們建立乙個使用者id為u0_a68程序id為1202父程序id為340的程序,當系統資源吃緊或者說使用者手動呼叫某些清理應用時,就會殺掉相應的程序,當然,雖然殺程序這種活對系統來說是一瞬間的事,但是其實質還是按部就班地進行並遵循一定的規則,這裡就不得不提到
處於該狀態下的程序表示其當前正在與使用者互動,是必須存在的,無論如何系統都不會去乾掉乙個前台程序除非系統出現錯誤或者說使用者手動殺掉。那麼系統是通過怎樣的乙個規則去判斷某個程序是否前台程序呢?下面是一些具體的情景:
Android 應用實現多程序
android service 跨程序實現 同乙個應用程式中實現多個程序通訊 通訊機制 使用aidl通訊 具體步驟 1 新建aidl檔案 例 iclickaidlinte ce.aidl inte ce iclickaidlinte ce 以上步驟,如果沒有差錯,重新編譯,會自動生成乙個 iclic...
Android檢視應用的程序和執行緒
1.檢視應用的程序資訊 ps ef grep com.example.replugin.host ps e 顯示現行終端機下的所有程式,包括其他使用者的程式 ps f 用ascii字元顯示樹狀結構,表達程式間的相互關係 2.檢視程序號為的程序建立的所有執行緒。ps t p ps t p 4836 p...
Android高階(二)應用程序啟動
一 應用程式程序建立 1 應用程序請求 2 接收建立請求 通過zygoteserver的runselectloop方法處理建立程序的請求 zygoteconnection的runonce處理請求資料 zygoteinit的zygoteinit方法中建立binder執行緒池 runtimeinit的i...