Android 中有一套 Low Memory Killer 机制 , 应用退出后 , 其进程不会马上被杀死 , 而是缓存起来 ;
如下图所示 , 点击回退键 , 使应用退出后 , 然后点击 Menu 键 , 从任务栈列表中扔可以看到退出的应用 , 此时点击该任务栈 , 仍可以将该应用拉起到前台 ;
打开应用越多 , 后台缓存的应用也就越多 ; 如果出现内存不足的情况 , 系统会根据 Low Memory Killer 机制 判定哪些进程被回收 , 为新的进程提供充足的内存 ;
查看 Android 设备中的 Low Memory Killer 机制 相关参数 ;
进入 Android 命令行 , 获取 root 权限后 , 执行如下代码 :
cat /sys/module/lowmemorykiller/parameters/minfree
执行上述命令 , 可以看到该配置文件中配置了
个数值 , 其单位是
,
C:\Users\octop>adb shell
walleye:/ $ su
walleye:/ # cat /sys/module/lowmemorykiller/parameters/minfree
18432,23040,27648,32256,55296,80640
walleye:/ #
分析 /sys/module/lowmemorykiller/parameters/minfree
配置文件中的
个数值 , 单位
;
18432,23040,27648,32256,55296,80640
最后一个数字
, 乘以
, 除以
, 最后得到 ;
该配置的含义是如果当前可用内存小于
, 就会将 空进程 杀掉 ;
内存不足时杀进程的优先顺序 :
时 , 杀 " 前台进程 " ;
时 , 杀 " 可见进程 " ;
时 , 杀 " 服务进程进程 " ;
时 , 杀 " 后台进程 " ;
时 , 杀 " ContentProvider 进程 " ;
时 , 杀 " 空进程 " ;
不同的手机中 , 对应的数值不同 , 越低端的手机 , 内存阈值越小 ;
如果可用内存低于上述的
个配置的内存数值 , 就会按照顺序 , 依次向上逐步杀进程 ;