android程序保活實踐

2021-10-11 07:46:41 字數 2870 閱讀 4583

前言

程序保活的關鍵點有兩個,乙個是程序優先順序的理解,優先順序越高存活機率越大。二是弄清楚哪些場景會導致程序會kill,然後採取下面的策略對各種場景進行優化:

提高程序的優先順序

在程序被kill之後能夠喚醒

程序優先順序

android一般的程序優先順序劃分:

1.前台程序 (foreground process)

2.可見程序 (visible process)

3.服務程序 (service process)

4.後台程序 (background process)

5.空程序 (empty process)

這是一種粗略的劃分,程序其實有一種具體的數值,稱作oom_adj,注意:數值越大優先順序越低:

要注意的是android4.3之後service.startforeground() 會強制彈出通知欄,解決辦法是再啟動乙個service和推送共用乙個通知欄,然後stop這個service使得通知欄消失。

android 7.1之後google修復這個bug,目前沒有解決辦法

下面的**放到你的service的onstartcommand方法中:

//設定service為前台服務,提高優先順序

if(build.version.sdk_int <18)

else

if(build.version.sdk_int>

18&& build.version.sdk_int<25)

else

經過改進之後,再來看下這個後台service程序的oom_adj,發現被提公升為前台程序。

2.在大多數國產手機下,進入鎖屏狀態一段時間,省電機制會kill後台程序

這種情況和上面不太一樣,是很過國產手機rom自帶的優化,當鎖屏一段時間之後,即使手機記憶體夠用為了省電,也會釋放掉一部分記憶體。

策略:註冊廣播監聽鎖屏和解鎖事件, 鎖屏後啟動乙個1畫素的透明activity,這樣直接把程序的oom_adj數值降低到0,0是android程序的最高優先順序。 解鎖後銷毀這個透明activity。這裡我把這個activity放到:remote程序也就是我那個後台服務程序,當然你也可以放到主程序,看你打算保活哪個程序。

我們可以寫乙個keeplivemanager來負責接收廣播,維護這個activity的常見和銷毀,注意鎖屏廣播和解鎖分別是:action_screen_oof和action_user_present,並且只能通過動態註冊來繫結,並且是繫結到你的後台service裡面,oncreate繫結,ondestroy裡面解綁

配好之後把手機鎖屏,看下:remote程序的oom_adj:

* 國內手機廠商白名單跳轉工具類

*/public

class

settingutils

catch

(exception e)

}private

static intent getsettingintent()

intent intent =

newintent()

; intent.

addflags

(intent.flag_activity_new_task);if

(componentname!=null)

else

return intent;

}}補充幾點:

配好start_sticky後,通過android studio 釋放程序的工具測試下,可以發現:remote程序被kill之後馬上重啟了:

1.和android版本關係很大

對於android6.0以及以下的大部分機型還是有效果的,但是android7.0和android8.0基本上所有機型全部陣亡,大部分後台程序在鎖屏後無法存活超過20分鐘。

這個可以從android 6.0,7.0和8.0的新特性看出一些端倪,google對於記憶體/電量使用越來越嚴格。

Android程序保活

2個方法 1.不讓殺 2.殺了復活 程序優先順序 1.前台程序 resume 2.可見程序 pause 4.後台程序 5.空程序 不被殺提公升優先順序1.前台服務 啟用2個前台服務,消除通知 變成可見程序 2.廣播監聽鎖屏解鎖,啟動1畫素活動 儘量減少記憶體占用,在相同oom adj的情況下,也更加...

Android程序保活

對於程式被殺死,一般我們能做到兩個方面優化 保證程序的優先順序 當程序被殺死之後的喚醒 程序的優先順序 程序根據優先順序區分可以分為 前台程序 可見程序 服務程序 後台程序 空程序 程序中有個較為具體的值oom adj,其數值越小對應的優先順序越高 紅色部分是易於被 的 4 16 綠色部分是不易被 ...

Android中的程序保活

最近在看aidl相關的知識,無意間看到一篇程序保活的文章,正好涉及到了程序相關的內容。順便學習一下。一 什麼是程序保活 程序保活可以理解為讓乙個程序最大程度不被殺死,或者殺死後第一時間復活。二 程序的劃分 1 活動程序 優先順序最高,使用者正在操作的程式,是前台程序,並且可操作。2 可見程序 次高優...