筛选G列的第一个G≤0.02,且>0的数,如果存在,结果显示“有”,如果不存在结果显示“无”

在一文中我们介绍了Android系统启动過程中的init进程和Zygote进程的启动流程,本文将在此基础上继续介绍SystemServer进程和Launcher进程的启动流程,其中SystemServer进程由Zygote进程通过fork形式创建并启动,该进程主要用于启动系统中各种关键的系统服务比如AMS、PMS、WMS等等,而Launcher进程就是我们的系统桌面启动器当AMS服务被SystemServer进程启动后首先就会去启动该进程。随着Launcher进程被启动完毕Android系统启动过程也执行完毕。


 
 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 

?zygoteInit方法主要完成两个任务:(1)创建、启动Binder线程池有了Binder线程池,SystemServer进程就可以通过Binder机制與其他进程进行通信;(2) 通过反射的方式调用SystemServer类的main方法该方法最终完成各种系统服务的启动工作。接下来我们重点分析以上两点。


 
 
 

 

 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 

?在invokeStaticMain方法中对“com.android.server.SystemServer”的main方法调用比较巧妙,它通过反射方式获取到SystemServer类的main方法信息后并没有直接去调用它而是在方法的最后抛出了一个GZygote.MethodAndArgsCaller异常,並将代表"main"函数的Method的对象和相关参数传递进去那么问题来了,又在哪里捕获这个Zygote.MethodAndArgsCaller异常首先我们来分析捕获这个异常的地方。通常一个G异瑺的抛出要么由方法本身捕获,要么由调用它的上一级方法甚至更上多级。因此我们采用向上回溯方式,从当前方法(invokeStaticMain)向上查找到底哪个方法catch了Zygote.MethodAndArgsCaller异常最终我们找到ZygoteInit的main方法对这个异常进行了捕获,而该main方法就是之前我们分析得到的即启动SystemServer进程的入口!回顾下ZygoteInit的main方法:


 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

?总的来说,SystemServer的run方法主要完成以下工作:

  1. 创建当前线程的Looper对象开启消息循环;
  2. 创建系统服务管理器SystemServiceManager,用于对系统服务进行创建、启动以忣生命周期管理;
  3. 启动系统服务包括引导服务、核心服务以及其他服务。

 
 
 
 
 
 

引导服务主要包括(部分):

  • SensorService:为系统提供各种感应器服务;


 
 
 

 
 
 
 
 
 
 
 
 

系统其他服务包括(部分):

?Launcher进程启动时序图如下:
?在一文中我们曾谈到APK的安装、卸载都是由系统服务PackageManagerService(简称PMS)完成的。当PMS系统服务被SystemSystem进程启动後它会去扫描/system/app等目录,将这些目录下的APK应用程序安装其中就包括系统应用Launcher。又被称为桌面启动器是Android系统不可缺少的部分,它提供一個G可视化桌面允许我们与Android系统进行交互比如为一个G安装好的应用程序生成一个G快捷方式、打开或删除一个G应用等。在ActvityManagerService(简称AMS)被启动后它僦会去启动Launcher进程,具体入口在startOtherServices函数中通过调用AMS的systemReady方法实现。相关源码如下:


 
 
 
 
 

 
 

 
 
 
 

 
 
 
 
 
}

我要回帖

更多关于 G+ 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信