systemserver和ams启动

2021-12-21  本文已影响0人  nich

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

其他两个慢慢整


上一篇下一篇

猜你喜欢

热点阅读