Android:HowTo設定アプリがシステムキルに落ちません。
アプリをセットすると永遠にkillにならない方法があります。Android Manifest.xmlに追加します。
android:persistent=「true」
system/apの下に置くアプリに適用します。
設定した後にappはシステムの核心のレベルに昇格して、いかなる情況の下でkillに落ちることはできなくて、settings->applicationの中もstop操作を遮ることができて、
設定前Proc #19: adj=svc /B 4067 b 028 255:comp.xx.xxx/10001 (started-services)
同前 cat /proc/255/oom_adj
4
設定後PERS #19: adj=core /F 406291 f 0 155:comp.xx.xxx/10001 (fixed)
同前 cat /proc/155/oom_adj
-12
lowmemorykillerの操作規則は、例えば
write/sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15
write/sys/module/lowmemorykiller/parameters/minfree 2048,3072,4096,6144,7168,8192
見られます。persistentを設定したら、oom_adj=-12、いつまでもlowmemorykillerに処理される機会がありません。
android:persistent Whether or not the appication Shuld remain running at all times-「true」if it shound,and「false」if not.The default value is「false」.Apple shound normally set flags。persistence mode is intensded only for certain system aplications
コード
のアプリで、ap.maxAdj=CORE_を設定します。SERVER_ADJ(-12)であり、adj=-12はlowmemorykillerによって処理されない。
android:persistent=「true」
system/apの下に置くアプリに適用します。
設定した後にappはシステムの核心のレベルに昇格して、いかなる情況の下でkillに落ちることはできなくて、settings->applicationの中もstop操作を遮ることができて、
設定前Proc #19: adj=svc /B 4067 b 028 255:comp.xx.xxx/10001 (started-services)
同前 cat /proc/255/oom_adj
4
設定後PERS #19: adj=core /F 406291 f 0 155:comp.xx.xxx/10001 (fixed)
同前 cat /proc/155/oom_adj
-12
lowmemorykillerの操作規則は、例えば
write/sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15
write/sys/module/lowmemorykiller/parameters/minfree 2048,3072,4096,6144,7168,8192
見られます。persistentを設定したら、oom_adj=-12、いつまでもlowmemorykillerに処理される機会がありません。
android:persistent Whether or not the appication Shuld remain running at all times-「true」if it shound,and「false」if not.The default value is「false」.Apple shound normally set flags。persistence mode is intensded only for certain system aplications
コード
ActivityManagerService.java
final ProcessRecord addAppLocked(ApplicationInfo info) {
ProcessRecord app = getProcessRecordLocked(info.processName, info.uid);
if (app == null) {
app = newProcessRecordLocked(null, info, null);
mProcessNames.put(info.processName, info.uid, app);
updateLruProcessLocked(app, true, true);
}
if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))
== (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
app.persistent = true;
app.maxAdj = CORE_SERVER_ADJ;
}
if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < 0) {
mPersistentStartingProcesses.add(app);
startProcessLocked(app, "added application", app.processName);
}
return app;
}
同時にFLAG_に適合することが見られます。SYSTEM(/system/apディレクトリ)およびFLAG_PERSISTENT(android:persistent=「true」)のアプリで、ap.maxAdj=CORE_を設定します。SERVER_ADJ(-12)であり、adj=-12はlowmemorykillerによって処理されない。