Activity 的启动过程:
1.从startActivty 方法进入跳转至
2.startActivtyforResult() 参数中含有mMainThread.getApplationThread()
这个方法的类型是ApplactionThread 它 是ActivityThread的一个内部类
调用AMS部分
3.执行execStartActivity方法() 这个方法的真正实现者是ActivityManagerNative.getDefault();
继承自ActivityManagerService而AMN 继承自binder 并实现了IActivityManager 这个Binder真正的操作方法在AMS中的startActivity方法中
栈部分
4.在执行execStartActivity 方法中还有一个checkActivityResult();这个方法是用来检测activity 是否正常启动当无法正常启动时则会报出异常信息。
5.由此进入至 ActivityStackSupervisor中
6.执行startActivityMayWait
7.执行StartActivityLocked
8.执行StartAcitityUncheackLocked
9.进入ActivityStack 中
10.执行resumeTopActivityLocked
11.回到ActivityStakSuperviser 中
12.执行StartSpecificAcitvitylocked
13.执行realStartActivityLocked
在realStart ActivityLock中代码
app.thread.scheduleLaunchActivity 其中appthread类型为IapplicationThread
在这个接口函数中声明了大量的关于启动和停止的方法。
由此我们推测这个接口的实现者 完成了大量的工作。
推测这个实现者是AcitivityThread 中的内部类AppliactionThread
14.执行的scheduleLaunchActivity 即是ApplicationThread的schedulelaunchAcitivity方法
发送一个启动Activity 的handler消息给handler 处理 handler 的名称为 H
15.Handler 的处理方式由 ActivityThread的handlelaunchAcitivity方法实现
其中交给handleResumeActivity方法来调用被启动的Activity 的onResume这一个生命周期
16交给performLaunchActivity最终完成了Activity 的启动过程
17PerFormLaunchActivity 主要完成的几件事
1.从ActivityClientRecord中获取待启动的Activity 的信息
2.通过Instrumentation 的newActivity 方法 通过类加载器加载Activity 对象
3.通过LoadedApk 的makeApplication 方法创建Application 调用Application 的oncreate方法
4.创建 ContextImpl对象并通过attach方法来完成一些数据的初始化。
这里还会完成window 关联等。 并调用activity 的onCreate方法
ContextImpl 创建特殊的单例模式