欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android进程管理:LRU weight机制的使用

程序员文章站 2022-06-27 16:56:55
借鉴自Android的设计与实现 LRU是最近最少使用的意思。 Android应用程序进程(包括建立了应用程序进程运行环境的system_server进程)启动后,都会在AMS...

借鉴自Android的设计与实现

LRU是最近最少使用的意思。

Android应用程序进程(包括建立了应用程序进程运行环境的system_server进程)启动后,都会在AMS的成员变量中保存其ProcessRecord信息。

保存ProcessRecord的方式有许多种,例如在mPidsSelfLocked和mProcessNames成员变量中,前者是PID为键,后者是进程名为键。

这种方式的存储顺序通常与应用程序组件的启动顺序相同,用于调度应用程序组件。

此外mLruProcesses以LRU顺序存储了当前运行的应用程序进程信息,mLruProcesses中的第一个元素就是最近最少使用的进程对应的ProcessRecord,用于管理应用程序进程。

3种情况可以更新mLruProcesses:

1.应用程序异常退出:调用handleAppDiedLocked更新mLruProcesses

2.显式“杀死”指定进程:调用AMS显式“杀死”进程时需要更新mLruProcesses

3.启动和调度应用程序4大组件:调用updateLruProcessLocked更新mLruProcesses

应用程序异常退出后,其进程也会被“杀死”。因此1、2情况都是从mLruProcesses列表中删除该进程信息。

更新入口

Android进程管理:LRU weight机制的使用

源码变化了很多,不贴了

updateLruProcessInternalLocked的主要工作

1.为指定的进程计算LRU序列号和LRU weight

2.根据lru weight值将指定进程信息插入mLruProcesses表示的进程LRU列表中,lru weight的值越大,在列表中的位置越靠后

3.如果进程使用了Content Provider或者Service,还需要更新Content Provider或者Service所在进程的lru weight及其在LRU列表中的位置

4.根据参数oomAdj的值决定是否同时调整OOM adj的值。

updateLruProcessInternalLocked方法调整的只是进程的lru weight和进程在LRU列表中的位置,并不会直接参与进程的管理,但是当其参数oomAdj的值为true时,便可以调用updateOomAdjLocked方法更新OOM adj信息,进而影响进程的管理。