Android 系統對于內存管理有自己的一套方法,為了保障系統有序穩定的運信,系統內部會自動分配,控制程序的內存使用。當系統覺得當前的資源非常有限的時候,為了保證一些優先級高的程序能運行,就會殺掉一些他認為不重要的程序或者服務來釋放內存。這樣就能保證真正對用戶有用的程序仍然再運行。如果你的 Service 碰上了這種情況,多半會先被殺掉。但如果你增加 Service 的優先級就能讓他多留一會,我們可以用 setForeground(true) 來設置 Service 的優先級。
為什么是 foreground ? 默認啟動的 Service 是被標記為 background,當前運行的 Activity 一般被標記為 foreground,也就是說你給 Service 設置了 foreground 那么他就和正在運行的 Activity 類似優先級得到了一定的提高。當讓這并不能保證你得 Service 永遠不被殺掉,只是提高了他的優先級。 有一個方法可以給你更清晰的演示,進入 $SDK/tools 運行命令 復制代碼# adb shell dumpsys activity|grep oom_adj Running Norm Proc # 6: oom_adj= 0 ProcessRecord{43635cf0 12689:com.roiding.netraffic/10028} Running Norm Proc # 5: oom_adj= 7 ProcessRecord{436feda0 12729:com.android.browser/10006} Running Norm Proc # 4: oom_adj= 8 ProcessRecord{4367e838 12761:android.process.acore/10016} Running Norm Proc # 3: oom_adj= 8 ProcessRecord{43691cd8 12754:com.google.process.gapps/10000} Running PERS Proc # 1: oom_adj=-12 ProcessRecord{43506750 5941:com.android.phone/1001} Running PERS Proc # 0: oom_adj=-100 ProcessRecord{4348fde0 5908:system/1000}復制代碼返回的一大堆東西,觀察 oom_adj 的值,如果是大于 8 一般就是屬于 backgroud 隨時可能被干掉,數值越小證明優先級越高,被干掉的時間越晚。你看phone的程序是 -12 說明電話就是電話,其他什么都干了了,也的能接電話對吧。另外還有一個 -100 的,更邪乎因為是 system 如果他也完蛋了,你得系統也就掛了。 我是天王蓋地虎的分割線新聞熱點
疑難解答