Application的启动
1 launcher 的应用图标被点击。
2 调用Instrumentation.execStartActivity(this,mMainThread.getApplicationThread(), …) 创建ApplicationThread并调用ActivityManager.getService() .startActivity。
3 ActivityManager.getService() .startActivity(ApplicationThread,…)使用ApplicationThread开启。
4 ActivityManager.getService()使用ServiceManager.getService获取实例,如下:
final IBinder b=ServiceManager.getService(Context.ACTIVITY_SERVICE);
//2. aidl 获取AMS
final IActivityManager am = IActivityManager.Stub.asInterface(b);
5 进入第3步的startActivity方法,一连串调用之后,创建了ActivityStack。
6 然后调用ActivityStack的resumeTopActivityInnerLocked。
7 然后调用ams的startProcessLocked。
8 然后调用startViaZygote方法。
9 然后调用zygoteSendArgsAndGetResult,zygote使用参数fork子进程。
Task的创建
Task是栈,先进后出,每个应用都有一个对应的Task,用来存放Activity
Activity的启动和声明周期的管理
启动方式