有一种方法可以设置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

代码

[java] view plaincopy
  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) < 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处理

Android: app不被系统kill掉相关推荐

  1. Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  2. Android APP字体随系统字体调整造成界面布局混乱问题解决方案

    一.遇到的问题 当用户调整系统字体大小的时候,APP的字体一般也都会跟随改变,进而导致某些界面布局排版混乱. 下面先说一下关于sp单位的理解 sp单位除了受屏幕密度影响外,还受到用户的字体大小影响,通 ...

  3. android 7.1 字体更换,Android APP字体随系统字体调整造成界面布局混乱问题解决方案...

    一.遇到的问题: 当用户调整系统字体大小的时候,APP的字体一般也都会跟随改变,进而导致某些界面布局排版混乱. 下面先说一下关于sp单位的理解 sp单位除了受屏幕密度影响外,还受到用户的字体大小影响, ...

  4. android改变整个app字体大小,Android APP字体随系统字体调整造成界面布局混乱问题解决方案...

    一.遇到的问题: 当用户调整系统字体大小的时候,APP的字体一般也都会跟随改变,进而导致某些界面布局排版混乱. 下面先说一下关于sp单位的理解 sp单位除了受屏幕密度影响外,还受到用户的字体大小影响, ...

  5. Android下写一个永远不会被KILL掉的进程/服务

    Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一 ...

  6. android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ?Android.content.Context ?and ...

  7. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3

    第二部分: 做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看 ...

  8. Android 系统(55)---Android App开发之ANR异常的原因分析及处理总结

    Android App开发之ANR异常的原因分析及处理总结 Android App开发之ANR异常的原因分析及处理总结 ANR的全称是application not responding,根据它的意思 ...

  9. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 2

    保持Service不被Kill掉的方法--双Service守护,代码如下: AndroidManifest.xml: [java] view plaincopy <activity androi ...

最新文章

  1. 问题征集 | 跟计算机史学家对谈是一种怎样的感受
  2. 靠Python数据分析已赚10w的本科生
  3. mac下安装与配置mysql数据库,Mac下MySQL的安装与配置
  4. python输出语句print i、j、k,python:在exec语句中获取打印输出
  5. Coinbase与CS: GO比赛组织者BLAST Premier签署赞助协议
  6. js和php难度,有js基础和简单的php基础,但是学习nodejs还是很吃力
  7. Bootstrap 后台模板-AdminLTE
  8. 炫酷神器,AE插件Bodymovin.zxp的安装与使用
  9. GRUB和LILO的区别
  10. 【软件测试面试题】证券项目面试过程总结
  11. 北京航空大学计算机录取分数线,北京航空航天大学录取分数线2021是多少分(附历年录取分数线)...
  12. vue根据获取的文件名显示文件服务器上的图片
  13. matlab冲激响应不变发,matlab实验七冲激响应不变法IIR数字滤波器设计
  14. C语言:strcpy()---字符串复制
  15. 云适配联合IT巨头拟成立“中国企业级HTML5产业联盟”
  16. 数学建模笔记(十三):离散模型(DP、图论)
  17. 苹果应用程序商店_苹果TF上架丨Testflight如何使用?
  18. 详解SpringBoot整合Redis
  19. 情人节python代码_情人节 ,能否表白成功就看这段Python代码了
  20. 工作中遇见的git疑问整理

热门文章

  1. Network Virtualization In Solaris 11
  2. Window系统下 MongoDB 下载 和 安装
  3. C语言调用函数将is替换为be,C语言程序设计课件ppt.ppt
  4. Word2Vec算法详解(CBOW和skip-gram算法详解)
  5. 机器学习--支持向量机实战(二)简易SMO算法实现
  6. oracle共享内存系统全局,Oracle10g 管理系统全局区简介
  7. java 比较2个时间大小写_date - Java 8:计算两个LocalDateTime之间的差异
  8. 在马来西亚做it总监_IT行业40岁以上的人都去哪儿了?
  9. mysql导入报错1071_导入sql文件报错:1071 Specified key was too long; max key length is 767 bytes...
  10. mysql函数第一次返回字符串_Mysql字符串处理函数详细介绍、总结