二、oom_adj 值动态改变
1、正常运行时的 oom_adj 值
一个程序的 oom_adj 值是不断动态改变的 , 当程序处于前台时 , 该前台进程的 oom_adj 的值为 0 ,
运行程序 ,
在 Android Studio 中 , 可以看到该运行的程序的进程号 PID 为 30856 3085630856 ,
进入 adb shell 命令行 , su 获取 root 权限 , 使用如下命令 , 查询指定 PID 的 oom_adj 值 ;
cat /proc/30856/oom_adj
2、按下 Home 键后的 oom_adj 值
点击 Home 键 , 程序退出 , 显示 Home 程序 ,
此时查询该 PID 为 30856 3085630856 的 oom_adj 值为 12 1212 , 不可见进程范围是 9 99 ~ 15 1515 , 此时的状态是不可见状态 ;
3、按下回退键后的 oom_adj 值
如果是按下回退键退出界面 , 此时查询该 PID 为 30856 3085630856 的 oom_adj 值为 16 1616 , 此时进程的状态是缓存进程 , 随时都可能被杀掉 ;
二、进程保活优化方向
优先级越高 , oom_adj 值越小 , 越不能被杀死 ;
如果想要使得进程尽可能长的保留在内存中 , 那么就要减小 oom_adj 的值 ;
在 oom_adj 值相同时 , 内存占用量越大的进程 , 被杀的几率就越高 , 因此这里还要尽可能降低进程占用尽可能少的内存 ;
总结一下就是 ① 降低 oom_adj 值 , ② 减小内存占用 ;