Android线程优先级和进程oom_adj

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android线程优先级和进程oom_adj相关的知识,希望对你有一定的参考价值。

参考技术A

在处理app启动速度的时候,可以设置主线程的优先级,保证主线程占用的cpu足够久。进程的oom_adj,决定了当内存不够的时候,lmk会根据oom_adj的大小依次释放内存。

android中对线程等级划分如下:

设置线程的优先级分为:android 提供的api和java sdk自带的api
注意: 要使用android提供的api设置,用java提供的作用不够显著

作用: 可以在主线程设置主线层等级;在Glide加载图片的时候设置低优先级。当图片量很大的时候可以降低加载图片线程的等级

android内存不够了,会触发oom机制,lowMemoryKiller会根据每个进程的oom_adj的等级,依次杀死进程,释放内存。

lom会根据free的内存的值,来判断kill掉哪个等级下的进程。例如当空闲内存只有64M了。会kill掉oom_adj 为12-15的进程

真实案例:应用A跳到第三方应用B,在第三方应用B中播放视频,加载大量图片,导致返回的时候,应用A走了SplashActivity。通过logcat发现A应用被kill掉了

以上是关于Android线程优先级和进程oom_adj的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 系统文件分析 ( /proc/pid 进程号对应进程目录 | oom_adj | maps | smaps | mem | task | environ )(代码片

Android保活方案

Android 7.0 ActivityManagerService 进程管理相关流程分析

Android线程优先级

android进程优先级

操作系统:进程与线程大解析