SuperIC社区_

标题: HowTo设置app不被系统kill掉 [打印本页]

作者: linker    时间: 2016-9-29 10:59
标题: HowTo设置app不被系统kill掉
有一种方法可以设置app永远不会被kill,AndroidManifest.xml 中添加:
android:persistent="true"
适用于放在/system/app下的app

设置后app提升为系统核心级别,任何情况下不会被kill掉, settings-<applicati**里面也会屏蔽掉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". Applicati** should not normally set this flag; persistence mode is intended only for certain system applicati**

代码
  1. ActivityManagerService.java  
  2. final ProcessRecord addAppLocked(ApplicationInfo info) {  
  3.         ProcessRecord app = getProcessRecordLocked(info.processName, info.uid);  
  4. if (app == null) {  
  5.             app = newProcessRecordLocked(null, info, null);  
  6.             mProcessNames.put(info.processName, info.uid, app);  
  7.             updateLruProcessLocked(app, true, true);  
  8.         }  
  9. if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT))  
  10.                 == (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {  
  11.             app.persistent = true;  
  12.             app.maxAdj = CORE_SERVER_ADJ;  
  13.         }  
  14. if (app.thread == null && mPersistentStartingProcesses.indexOf(app) < span>0) {  
  15.             mPersistentStartingProcesses.add(app);  
  16.             startProcessLocked(app, "added application", app.processName);  
  17.         }  
  18. return app;  
  19.     }  
复制代码


可以看到同时符合FLAG_SYSTEM(/system/app目录)及FLAG_PERSISTENT(android:persistent="true")
的app,设置app.maxAdj = CORE_SERVER_ADJ(-12),而adj=-12不会被lowmemorykiller处理0


作者: creass    时间: 2016-9-29 11:10
好文章要顶起来
作者: creass    时间: 2016-9-29 11:13
好文章要顶起来
作者: Mike    时间: 2016-9-30 12:06
学习学习
作者: creass    时间: 2016-9-30 14:29
好东西要顶起来,大家说对不对吗?




欢迎光临 SuperIC社区_ (/) Powered by Discuz! X3.3