zoukankan      html  css  js  c++  java
  • 【代码】Android: 怎样设置app不被系统k掉

    有一种方法可以设置app永远不会被kill,AndroidManifest.xml 中添加:

    android:persistent="true"

    适用于放在/system/app下的app
     
    设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作,
    设置前 Proc #19: adj=svc  /B 4067b028 255:com.xxx.xxx/10001 (started-services)
    # cat /proc/255/oom_adj
    4
    设置后 PERS #19: adj=core /F 406291f0 155:com.xxx.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 application should remain running at all times — "true" if it should, and "false" if not. The default value is "false". Applications should not normally set this flag; persistence mode is intended only for certain system applications
     
    代码

    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/app目录)及FLAG_PERSISTENT(android:persistent="true")

    的app,设置app.maxAdj = CORE_SERVER_ADJ(-12),而adj=-12不会被lowmemorykiller处理


    本文出自 “清源教育” 博客,转载请注明此处,谢谢! *_^ 

  • 相关阅读:
    上传图片时判断图片的模式GRB或CMYK
    正则表达式的6中使用
    SqlServer获得存储过程的返回值
    从零学习wcf(一)
    等比例缩小图片
    模仿Jquery Tab
    jquery ajax调用一般处理程序
    一种感觉
    "敏捷软件开发" 读书笔记叙
    荣迁贵宝地
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3320130.html
Copyright © 2011-2022 走看看