AMS的构造函数比想象得要简单些,下面回顾一下它的工作:
· 创建BSS、USS、mProcessStats (ProcessStats类型)、mProcessStatsThread线程,这些都与系统运行状况统计相关。
· 创建/data/system目录,为mCompatModePackages(CompatModePackages类型)和mConfiguration(Configuration类型)等成员变量赋值。
Activity作为Android系统中的UI容器
ActivityThread:是主线程,负责调度线程中的4大组件:Activity, Service, Broadcast, Content Provider.
Instrumentaion是一个工具类。当它被启用时,系统先创建它,再通过它来创建其他组件。另外,系统和组件之间的交互也将通过Instrumentation来传递,这样,Instrumentation就能监测系统和这些组件的交互情况了。在实际使用中,我们可以创建Instrumentation的派生类来进行相应的处理。读者可查询Android中Junit的使用来了解Intrstrumentation的作用。本书不讨论Intrstrumentation方面的内容。
Application类保存了一个全局的application状态。Application由AndroidManifest.xml中的<application>标签声明。在实际使用时需定义Application的派生类。
:Context是一个接口,通过它可以获取并操作Application对应的资源、类,甚至包含于Application中的四大组件。
updateOomAdjLocked 计算更新所有process的 oomadj
oom_adj值越高代表该进程优先级越低.
android进程的oom_adj都在ActivityManagerService中更新
<span style="font-size:18px;"><code class="hljs cs has-numbering">updateLruProcessLocked(app, <span class="hljs-keyword">false</span>, <span class="hljs-keyword">null</span>); updateOomAdjLocked();</code><span style="color:#009900;"></span><p>这两步操作设计AMS管理进程的核心工作,我们稍后详细分析,我们先接下来的逻辑,接下来的逻辑中最重要的就是调用startProcessLocked方法实际启动一个进程:</p></span>
===============
到现在位置我们弄明白了android是怎么启动一个app进程的了,主要就是通过addAppLocked方法实现,这个方法会调用startProcessLocked方法实现,而这个方法很长,主要就是一些app进程启动数据和参数检查和设置,最后就是调用Process类的静态方法start方法和zygote建立链接fork进程。了解了AMS怎么启动一个进程之后,我们接下来分析一下AMS怎么管理进程的。
===============