第一部分:
1.启动一个app,从framework层中的init.rc进程方法开始,在这个方法里有一个参数pid,代表的是主线程还是子线程来的,1是主线程,通过这个来创建我们的孵化器Zygote
2.Zygote的作用主要分为两个方面:
a:创建SystemServer: 1.ActivityManagerService 2.WindowManagerService 3.PowerManagerService 4.InputyManagerService
b:孵化应用进程
3.Zygote是由init.rc这个方法创建的,创建好后,会调用ZygoteInit.java这个类,这个类中的Main中主要做了以下操作
a:先预加载apk资源
preloadClasses();
preloadResources();
preloadSharedLibraries();
preloadTextResources();
WebViewFactory.prepareWebViewInZygote();
b:判断startSystemServer这个boolean类,判断是否要启动SystemServer,这个Boolean主要是在main方法的这个里面获取
boolean startSystemServer = false;
String zygoteSocketName = "zygote";
String abiList = null;
boolean enableLazyPreload = false;
for (int i = 1; i < argv.length; i++) {
if ("start-system-server".equals(argv[i])) {
startSystemServer = true;
} else if ("--enable-lazy-preload".equals(argv[i])) {
enableLazyPreload = true;
} else if (argv[i].startsWith(ABI_LIST_ARG)) {
abiList = argv[i].substring(ABI_LIST_ARG.length());
} else if (argv[i].startsWith(SOCKET_NAME_ARG)) {
zygoteSocketName = argv[i].substring(SOCKET_NAME_ARG.length());
} else {
throw new RuntimeException("Unknown command line argument: " + argv[i]);
}
}
c:接下来这个方法中还进行了socket服务的创建,最后执行runSelectLoopMode进行线程阻塞,等待
4.创建好的SystemServer中做了那些操作呢
try {
t.traceBegin("StartServices");
startBootstrapServices(t);//引导服务
startCoreServices(t);//核心服务
startOtherServices(t);//其他一般服务
} catch (Throwable ex) {
Slog.e("System", "******************************************");
Slog.e("System", "************ Failure starting system services", ex);
throw ex;
} finally {
t.traceEnd(); // StartServices
}
a: 启动引导服务,比如ActivityManagerService 2.WindowManagerService 3.PowerManagerService
b:核心服务,比如电池状态管理等
c:其他一般服务,比如:InputyManagerService
最后接下来就是启动桌面应用了.
第二部分Launcher启动过程
Android的入口类其实是ActivityThread并不是Application
1.从源码可以观察到,其实Activity,service,bordercast,provider等都是有它来进行管理,并且loop和handler,以及application
一个activity的创建,从ActivityThread中的main方法开始,这里直接创建了loop.prepareMainLoop(),looper.loop()直接开始在主线程中进行轮训工作,并且通过attch(Application thread)方法想AMSZ中注册自己,同时传递ApplicationThread对象,以便实现
跨进程调度.