那麼他們是如何做到的呢?
一畫素保活法。
雙程序守護保活法。
賬號同步機制拉活。
開啟前台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,程序又可以包含許多執行緒,執行緒被稱作為輕量級的執行緒 安卓的應用程式是不可以控制自己的生命週期的,這份工作是交給安卓執行時來完成的,安卓執行時會根據程序所處的狀態來控制程式,程序的重要度越低,則越是...
你要知道的 程序 那些事
程序,指執行中的程式。在沒有執行緒前,程序如果阻塞,就會被掛起,即使其中有些操作並不依賴於等待的資源,仍舊不會執行。為了解決這個問題,作業系統引入了執行緒,作為程序中的一條執行流程。乙個程序包含多個執行緒,執行緒作為任務的真正執行者,有自己的暫存器和棧。同時,會和程序內其他執行緒共享虛擬記憶體等資源...