查看手机的内存阈值:
adb shell
su
chmod 777 /sys/module/lowmemorykiller/parameters/minfree
cat /sys/module/lowmemorykiller/parameters/minfree
得到的数值为:18432,23040,27648,32256,36864,46080
这6个数值分别代表android系统回收6种进程的阈值,这么看不方便查看,转换为M会更直观,这6个数值的单位为page 1page = 4K,所以通过 数值*4/1024就能转换为M:72M,90M,108M,126M,144M,180M
也就是说1.前台进程(foreground),2.可见进程(visible),3.次要服务(secondary server),4.后台进程(hidden),5.内容供应节点(content provider),6.空进程(empty)这6类进程进行回收的内存阈值分别为72M,90M,108M,126M,144M,180M
http://blog.csdn.net/robertcpp/article/details/51628639这篇文章介绍的这6类进程优先级及分类比较详细。
当内存到180M的时候会将空进程进行回收,当内存到144M的时候把空进程回收完以后开始对内容供应节点进行回收,并不是所有的内容供应节点都回收,而是通过判断它的优先级进行回收,优先级是用oom_adj的值来表示,值越大回收的几率越高
ps|grep 包名 来得到进程的id
通过进程id可以查看oom_adj的值:cat /proc/进程id/oom_adj
看到adj值是0,0就代表这个进程是属于前台进程,我们按下Back键,将应用至于后台,再次查看值为9,如果按home键值为8,不同的手机可能值不太一样。
adj级别值解释(摘自:http://blog.csdn.net/u013263323/article/details/56285475)
UNKNOWN_ADJ16预留的最低级别,一般对于缓存的进程才有可能设置成这个级别
CACHED_APP_MAX_ADJ15缓存进程,空进程,在内存不足的情况下就会优先被kill
CACHED_APP_MIN_ADJ9缓存进程,也就是空进程
SERVICE_B_ADJ8不活跃的进程
PREVIOUS_APP_ADJ7切换进程
HOME_APP_ADJ6与Home交互的进程
SERVICE_ADJ5有Service的进程
HEAVY_WEIGHT_APP_ADJ4高权重进程
BACKUP_APP_ADJ3正在备份的进程
PERCEPTIBLE_APP_ADJ2可感知的进程,比如那种播放音乐
VISIBLE_APP_ADJ1可见进程
FOREGROUND_APP_ADJ0前台进程
PERSISTENT_SERVICE_ADJ-11重要进程
PERSISTENT_PROC_ADJ-12核心进程
SYSTEM_ADJ-16系统进程
NATIVE_ADJ-17系统起的Native进程
备注:(上表的数字可能在不同系统会有一定的出入)
网友评论