当前位置: 移动技术网 > IT编程>移动开发>Android > Android进程管理:LRU weight机制的使用

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

2018年02月07日  | 移动技术网IT编程  | 我要评论

庆六一儿童节黑板报,进击的巨人61,紫乃彩

借鉴自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列表中删除该进程信息。

更新入口

\

源码变化了很多,不贴了

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信息,进而影响进程的管理。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网