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
 
コード
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によって処理されない。