systemserver启动
在frameworks/base/service/java/com/android/server/systemserver.java
然后看run方法里面主要四个方法
createSystemContext();
startBootstrapServices(t);//启动引导服务
startCoreServices(t);//启动核心服务
startOtherServices(t);//启动其他服务
looper.loop
createSystemContext
下面是设置系统主题,主要看activitythread
点击进去可以看到主要是
获取资源管理器和最主要的attach()方法
启动的app进程是创建appliactionthread对象,然后minitialapplication赋值,system_server进程是由activity thread的attach()赋值的,普通的app进程是由activitythread的handlebindapplication过程赋值的
系统app启动
首先是创建并实例化了一个Instrumentation对象,然后先调用了ContextImpl的静态方法createAppContext() 创建了一个实例,紧接着调用上面的ContextImpl实例context来创建Application对象,此处的Application就是我们程序入口的那个Application,我们看看怎么创建的
initializeJavaContextClassLoader 设置当前线程的Context ClassLoader,最终调用了Instrumentation的newApplication创建mApplication对象。
startBootstrapServices
mActivityManagerService =ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
通过反射调用 serviceClass 的构造方法 创建 Lifecycle 对象,并调用start方法启动。
看一下ams构造函数,主要干了新建android.ui线程,ActivityStackSupervisor,ActiveServices
接下来看start方法
移除所有进程组,启动电池统计服务啥的,再往下看是一些mActivityManagerService.setInstaller 设置AMS的APP安装器mActivityManagerService.initPowerManage,mActivityManagerService.setSystemProcess();
加载各种服务getSystemContext().installSystemApplicationInfo 最终调用LoadedApk的installSystemApplicationInfo,加载名为“android”的package
其他两个慢慢整
网友评论