1. 程式人生 > >android 防止應用被lowmemorykiller殺掉

android 防止應用被lowmemorykiller殺掉

  網上關於lowmemorykiller的文章一大把,總結一下,系統會不斷更新程序的adj值,然後在記憶體緊張的情況下,adj越大的應用越可能被殺,那麼我們要防止被殺,要麼是給我們的應用設定比較小的adj值,要麼是要殺的時候過濾我們的應用,因為殺程序是比較偏底層做的,不太熟悉.所以優先考慮,系統計算adj值的時候直接給我們的應用adj值賦為-1.

  直接說方法,系統計算過adj之後會通過下屬方法寫adj的值,我們只要在其中判斷我們有應用的包名,然後更改adj的值就可以,該方法在AMS中

private final boolean applyOomAdjLocked(ProcessRecord app, boolean doingAll, long now,
            long nowElapsed) {
        boolean success = true;
        int changes = 0;

        if (app.curAdj != app.setAdj) {
        	String[] packages = app.getPackageList();
        	if(packages != null){
        		for(String p : packages){
        			if(p.equals("你的包名")){
        				//android.util.Log.d(TAG_OOM_ADJ, "set usettings adj -1");
        				app.curAdj = -1;
        				break;
        			}

        		}
        	}
            ProcessList.setOomAdj(app.pid, app.info.uid, app.curAdj);
            if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(TAG_OOM_ADJ,
                    "Set " + app.pid + " " + app.processName + " adj " + app.curAdj + ": "
                    + app.adjType);
            app.setAdj = app.curAdj;
            app.verifiedAdj = ProcessList.INVALID_ADJ;
        }
}