10.6.2 清理预启动的非persistent进程
在系统启动阶段,一些进程因升级等原因会预先启动,这里需要清理这些进程。代码如下:
public void systemReady(final Runnable goingCallback){
……//省略第一部分工作
ArrayList<ProcessRecord>procsToKill=null;
synchronized(mPidsSelfLocked){
//mPidsSelfLocked以pid为键存储当前运行的应用程序进程信息
for(int i=mPidsSelfLocked.size()-1;i>=0;i—){
ProcessRecord proc=mPidsSelfLocked.valueAt(i);
//找到不允许预先启动的进程,非persistent进程是不运行预先启动的
if(!isAllowedWhileBooting(proc.info)){
if(procsToKill==null){
procsToKill=new ArrayList<ProcessRecord>();
}
procsToKill.add(proc);//加入到待清理列表
}
}
}
synchronized(this){
if(procsToKill!=null){
for(int i=procsToKill.size()-1;i>=0;i—){
ProcessRecord proc=procsToKill.get(i);
//清理进程在ActivityManagerService中的信息,并杀死进程
removeProcessLocked(proc, true, false,"system update done");
}
}
mProcessesReady=true;//清理后,第二阶段准备工作完成
}
synchronized(this){
if(mFactoryTest==SystemServer.FACTORY_TEST_LOW_LEVEL){
……//工厂测试相关
}
}
persistent进程是在AndroidManifest.xml中设置了android:persistent="true"的应用程序进程,如frameworks-res.apk、SystemUI.apk、Phone.apk等。这些进程需要常驻内存,不能被杀死。
注意 关于AndroidManifest.xml的详细信息,请参考开发者官方网站http://developer.android.com/guide/topics/manifest/manifest-intro.html。
清理预启动的非persistent进程后,便进入第三部分:读取Settings配置。