在Android系统中,adj
(OomAdj,即Out-of-Memory Adjustment)值是用来表示进程在系统内存管理中的相对重要性,决定系统在内存紧张时哪些进程应该被优先终止。以下是部分典型进程adj
值的范围和含义,注意这些值随Android版本的不同可能会有所调整,但基本概念保持一致:
-
FOREGROUND_APP_ADJ: 通常为0,表示前台应用程序,直接与用户交互。
-
VISIBLE_APP_ADJ: 一般为100,表示可见但非前台的应用程序,如后台有Activity处于暂停状态。
- 从Android P开始,这一区间细化为[100, 199],以区分不同程度的可见性或重要性。
-
PERCEPTIBLE_APP_ADJ: 传统上为200,表示虽然不可见但用户可能感知到其存在,如后台有服务在播放音乐。
-
SERVICE_ADJ: 一般高于200,表示后台服务进程,具体数值根据服务的重要性有所不同。
-
CACHED_APP_MIN_ADJ 和 CACHED_APP_MAX_ADJ: 这个范围通常是从约900至1000,表示最近使用过的但当前不活跃的缓存进程,最容易被系统回收。
-
UNKNOWN_ADJ: 通常为16,表示系统无法确定进程的状态,可能即将被缓存。
-
CACHED_APP_MIN_ADJ 至 CACHED_APP_MAX_ADJ: 表示那些可以被系统随时回收以释放内存的缓存进程,这个范围内的值表示不同的缓存进程优先级。
值得注意的是,adj
值的范围理论上可以从非常低的负数到正数(如-1000到1000),但实际上大多数常见的进程状态会落在上述提到的范围内。负值通常保留给系统核心进程和服务,这些是系统认为绝对不能杀死的进程。
这些值直接影响到系统如何通过Low Memory Killer (LMK)机制管理内存,当系统内存不足时,LMK会根据进程的adj
值来决定终止哪些进程,以释放内存给更重要的进程使用。