安卓程序保活那些事,你知道多少?

2021-10-01 06:10:13 字數 3318 閱讀 4105

那麼他們是如何做到的呢?

一畫素保活法。

雙程序守護保活法。

賬號同步機制拉活。

開啟前台service。

jobscheduler拉活。

sticky拉活。

他們這麼做的原因是什麼?

im(即時通訊)保活 (重點 重點 重點)

但這樣的做法過於流氓,影響android手機的效能。不建議使用!!!!但是有時候又沒有辦法。

但是8.0之前還有一部分使用者,所以保活還是要做,畢竟使用者就是我們的「衣食父母」,如何保活呢?當然是降低omm_adj值,盡量保證程序不被系統殺死。

什麼是oom_adj? 再介紹oom_adj是什麼之前,我們需要知道android的程序優先順序

優先順序程序名稱

oom_adj

1前台程序02

可見程序13

服務程序54

後台程序65

空程序9-25

什麼是oom_adj?

oom(out of memory adjustment)是android的機制,系統會根據程序的優先順序,給每個程序乙個oom權重值,android系統在記憶體不足情況下進行記憶體調整的重要引數,系統會根據這個優先順序去選擇將哪些程序殺掉,以騰出空間保證更高優先順序的程序能正常執行。

保活

一畫素保活法:在螢幕關閉時開啟乙個1px的activity,螢幕亮時關閉此activity(主題透明)

keepmanagerutils.

getinstance()

.registerkeep

(this)

;

/**

* @author:jhonjson

* @date:2019/11/18 14:56 am

* @describe:1畫素保活法 manager

*/public class keepmanagerutils

private keepmanagerutils()

private keeplivereceiver keeplivereceiver;

private weakreference mkeepliveactivity;

/** * 註冊

* @param context

*/public void registerkeepreceiver

(context context)

/** * 反註冊

* @param context

*/public void unregisterkeepreceiver

(context context)

}/**

* 啟動1個畫素的keepliveactivity

* @param context

*/public void startkeeplive

(context context)

/** * finish1個畫素的keepliveactivity

*/public void finishkeeplive()

mkeepactivity = null;}}

public void setkeepactivity

(keepliveactivity mkeepliveactivity)

}

public class keeplivereceiver extends broadcastreceiver 

else

if(textutils.

equals

(action, intent.action_screen_on))}

}

public class keepliveactivity extends activity 

@override

protected void ondestroy()

}

前台服務保活:啟動乙個前台服務,提高應用的優先順序

/**

* 繫結服務

** @param context

*/public static void bindlocalservice

(context context, serviceconnection serviceconnection)

//通過intent指定服務端的服務名稱和所在包,與遠端service進行繫結

intent intent =

newintent()

; intent.

setclass

(context, foregroundservice.class)

; bundle bundle =

newbundle()

; intent.

putextras

(bundle)

;//繫結服務,傳入intent和serviceconnection物件

context.

bindservice

(intent, serviceconnection, context.bind_auto_create);}

/** * 解綁服務

** @param context

*/public static void unbindlocalservice

(context context, serviceconnection serviceconnection)

try catch (exception e)

}

public class foregroundservice extends service 

@override

public void oncreate()

else

if(build.version.sdk_int < build.version_codes.o)

else}}

public static class innerservice extends service

@nullable

@override

public ibinder onbind

(intent intent)

}}

"com.xx.service.foregroundservice"

/>

"com.xx.service.foregroundservice$innerservice"

/>

安卓App程序保活

1.alarmmanager service 為確保更穩定的存活,服務使用前台服務來保活。2.jobservice service 不穩定!原因 當jobservice的onstartjob返回true時,且在此過程中始終不手動執行jobfinished時,10min後會自動執行onstopjob,...

安卓程序執行緒那些事

預設情況下,乙個程式所有的元件都是執行在同一程序和執行緒當中的,我們把它叫做main thread,程序又可以包含許多執行緒,執行緒被稱作為輕量級的執行緒 安卓的應用程式是不可以控制自己的生命週期的,這份工作是交給安卓執行時來完成的,安卓執行時會根據程序所處的狀態來控制程式,程序的重要度越低,則越是...

你要知道的 程序 那些事

程序,指執行中的程式。在沒有執行緒前,程序如果阻塞,就會被掛起,即使其中有些操作並不依賴於等待的資源,仍舊不會執行。為了解決這個問題,作業系統引入了執行緒,作為程序中的一條執行流程。乙個程序包含多個執行緒,執行緒作為任務的真正執行者,有自己的暫存器和棧。同時,會和程序內其他執行緒共享虛擬記憶體等資源...