源码基于:Android R
0. 前言
通过之前的两篇博文《lmkd 机制详解》和《oom_adj 内存水位算法剖析》中,根据计算出来的 min_score_adj 选择大于该值的 oom_adj 的进程进行 kill 处理。 oom_adj 随着应用状态的不同其值也是伴随着变化的。
本文将通过源码剖析 oom_adj 更新的原理。
1. adj 概念
Android 系统的设计理念希望应用进程尽可能的长时间的存活,以此来提升用户体验。在Android 中,应用首次打开会比较慢,这个过程包含进程的创建、application 初始化、应用其他逻辑等,所以,在应用退出时并非直接exit 进程或被 kill,而是会存活一段时间,这样就保证在下次启动时跟快启动。
当然,物极必反。在大量应用启动后就会造成内存大量使用,手机性能会随着下降。如果放任所有进程存活,系统内存就会枯竭。因此需要合理的回收机制,An