最近看powermanager时,看到了一些对进程状态判断的代码。下面简单的将枚举值的含义拷贝下来。
哎,想看5g,想看ims,想看python,想看SIP协议。东西好多。只能东织网,西织网,希望这些小小的网片合成大网。
看powermanager也是解拨号盘灭屏问题触发的。知识如海,人如一叶扁舟。
参考如下两个链接:
http://www.qingpingshan.com/m/view.php?aid=355521 从源码角度看Android进程保活原理与优先级调度机制
http://www.sohu.com/a/116461973_470016 Android 进程调度之adj算法
下面从网上拷贝的表格,对着代码看了,android对这些状态定义一直都在增加。比如下面的表格中原来没有PROCESS_STATE_TRANSIENT_BACKGROUND,看到android o源码有,添加进去了。
adj | 值 | 场景 |
---|---|---|
NATIVE_ADJ | -17 | native进程,framework中未涉及 |
SYSTEM_ADJ | -16 | 系统进程,也就是system_server |
PERSISTENT_PROC_ADJ | -12 | 系统常驻进程,如telephony, systemui |
PERSISTENT_SERVICE_ADJ | -11 | 1) 被系统进程或常驻进程绑定 2) 设置了BIND_ABOVE_CLIENT的flag |
FOREGROUND_APP_ADJ | 0 | 1) 当前进程正在显示Activity 2) instrumentation正在运行 3) 正在接收广播 4) 正在运行Service 4) provider被其它进程使用 |
VISIBLE_APP_ADJ | 1 | 该APP中有可见的Activity |
PERCEPTIBLE_APP_ADJ | 2 | 1) Activity正在或已经暂停 2) Activity正在Stop |
BACKUP_APP_ADJ | 3 | 备份进程 |
HEAVY_WEIGHT_APP_ADJ | 4 | heavy weight进程 |
SERVICE_ADJ | 5 | 30分钟内Service被启动 |
HOME_APP_ADJ | 6 | home进程 |
PREVIOUS_APP_ADJ | 7 | 运行过上一个显示的Activity |
SERVICE_B_ADJ | 8 | 运行Service未显示UI |
CACHED_APP_MIN_ADJ | 9 | 空进程最小adj |
CACHED_APP_MAX_ADJ | 15 | app.thread=NULL |
UNKNOWN_ADJ | 16 | adj未知 |
schedGroup | 值 | 场景 |
---|---|---|
THREAD_GROUP_DEFAULT | -1 | 1) maxAdj<=FOREGROUND 2) instrumentation正在运行 3) 正在接收前台广播 4) 正在运行前台Service 5) 有可见的Activity 6) Activity正在或已经暂停 7) provider被其它进程使用 |
THREAD_GROUP_BG_NONINTERACTIVE | 0 | 1) app.thread=NULL 2) 正在接收后台广播 3) 正在执行后台Service 3) heavy weight进程 4) home进程 5) 运行过上一个显示的Activity 6) 空进程 |
THREAD_GROUP_FOREGROUND | 1 | 前台线程group, framework未涉及 |
THREAD_GROUP_SYSTEM | 2 | 系统线程,framework未涉及 |
THREAD_GROUP_AUDIO_APP | 3 | 音频应用线程group |
THREAD_GROUP_AUDIO_SYS | 4 | 系统音频应用线程group |
procState | 值 | 场景 |
---|---|---|
PROCESS_STATE_NONEXISTENT | -1 | 未知 |
PROCESS_STATE_PERSISTENT | 0 | maxAdj<=FOREGROUND |
PROCESS_STATE_PERSISTENT_UI | 1 | 常驻进程并且正在显示UI |
PROCESS_STATE_TOP | 2 | 1) 当前进程正在显示Activity 2) 该APP中有可见的Activity 3) Activity正在或已经暂停 |
PROCESS_STATE_BOUND_FOREGROUND_SERVICE | 3 | 1) instrumentation正在运行 2) 绑定了前台Service 3) 绑定的Service进程为前台 4) 使用的provider进程为前台 |
PROCESS_STATE_FOREGROUND_SERVICE | 4 | 正在运行前台Service |
PROCESS_STATE_TOP_SLEEPING | 5 | 进入睡眠状态 |
PROCESS_STATE_IMPORTANT_FOREGROUND | 6 | Notification为Service设置了前台token |
PROCESS_STATE_IMPORTANT_BACKGROUND | 7 | 1) 备份进程 2) provider被其它进程使用 |
PROCESS_STATE_TRANSIENT_BACKGROUND | 8 | |
PROCESS_STATE_BACKUP | 9 | 备份进程 |
PROCESS_STATE_HEAVY_WEIGHT | 10 | heavy weight进程 |
PROCESS_STATE_SERVICE | 11 | 正在运行Service |
PROCESS_STATE_RECEIVER | 12 | 正在等待接收广播 |
PROCESS_STATE_HOME | 13 | home进程 |
PROCESS_STATE_LAST_ACTIVITY | 14 | 运行过上一个显示的Activity |
PROCESS_STATE_CACHED_ACTIVITY | 15 | 1) 无Activity活动 2) 空进程但是设置了BIND_TREAT_LIKE_ACTIVITY |
PROCESS_STATE_CACHED_ACTIVITY_CLIENT | 16 | 空进程但是有Activity |
PROCESS_STATE_CACHED_EMPTY | 17 | 空进程 |