android app 不会被low memory killer回收
16lz
2021-01-26
有一种方法可以设置app永远不会被kill,AndroidManifest.xml 中添加: android:persistent="true" 适用于放在/system/app下的app 设置后app提升为系统核心级别,任何情况下不会被kill掉, settings->applications里面也会屏蔽掉stop操作, 设置前 Proc#19:adj=svc/B4067b028255:com.xxx.xxx/10001(started-services) #cat/proc/255/oom_adj 4 设置后 PERS#19:adj=core/F406291f0155: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
代码
[java] view plain copy- ActivityManagerService.java
- finalProcessRecordaddAppLocked(ApplicationInfoinfo){
- ProcessRecordapp=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,"addedapplication",app.processName);
- }
- returnapp;
- }
可以看到同时符合FLAG_SYSTEM(/system/app目录)及FLAG_PERSISTENT(android:persistent="true")
的app,设置app.maxAdj = CORE_SERVER_ADJ(-12),而adj=-12不会被lowmemorykiller处理
更多相关文章
- 在Android(安卓)Studio上测试运行,Unity发布成Android包的环境搭
- android崩溃日志保存sdcard打开并发送到email
- Android的语言设置(二)
- Android(安卓)蓝牙操作详解
- Android(安卓)Studio --> Gradle Build设置自动
- Android(安卓)查询数据库时 项目出现 OOM (不断引发GC)
- Android修改百度地图的显示范围的大小
- Android(安卓)Button setTextColor()参数调用分析
- 2019-11-22 Notification(通知服务)的实例