Android防止アプリケーションがlowmemorykillerに殺される
1329 ワード
ネット上でlowmemorykillerについての文章をまとめてみると、システムはプロセスのadj値を更新し続け、メモリが緊張している場合、adjが大きいほどアプリケーションが殺される可能性があります.では、私たちは殺されることを防止しなければなりません.私たちのアプリケーションに比較的小さなadj値を設定するか、殺すときに私たちのアプリケーションをフィルタします.殺しプロセスは比較的下位層でよく知られていないので、優先的に考えてください.システムがadj値を計算する時、直接私たちの応用adj値に-1を与えた.
直接に言えば、システムはadjを計算した後、部下の方法でadjの値を書きます.私たちはその中でアプリケーションのパッケージ名を判断し、adjの値を変更すればいいです.この方法はAMSでは
直接に言えば、システムは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;
}
}