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配置。