Activity工作过程
Activity工作过程:
Activity.startActivity-->
Activity.startActivityForResult-->
Instrumentation.execStartActivity-->
ActivityManagerNative.getDefault().startActivity-->
ActivityManagerService.startActivity-->
ActivityStackSupervisor.startActivityMayWait-->
ActivityStackSupervisor.startActivityLocked-->
ActivityStackSupervisor.startActivityUncheckedLocked-->
ActivityStack.resumeTopActivitiesLocked-->
ActivityStack.resumeTopActivityInnerLocked-->
ActivityStackSupervisor.startSpecificActivityLocked-->
ActivityStackSupervisor.realStartActivityLocked-->
ApplicationThread.scheduleLaunchActivity-->
(Handler)H.handleMessage->
ActivityThread.handleLaunchActivity->
ActivityThread.performLaunchActivity
performLaunchActivity主要完成如下几件事
1)从ActivityClientRecord中获取待启动的Activity的组件信息
2)通过Instrumentation的newActivity的newActivity方法使用类加载器创建Activity对象
3)通过LoadedApk的makeApplication方法来尝试创建Application对象
4)创建ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化
5)调用Activity的onCreate方法
No1:
ApplicationThread是ActivityThread的一个内部类
ApplicationThraed继承了ApplicationThreadNative,而ApplicationThreadNative则继承了Binder并实现了IApplicationThread接口。
No2:
ActivityManagerService继承自ActivityManagerNative,而ActivityManagerNative继承自Binder并实现了IActivityManager这个Binder接口,因此AMS也是一个Binder,它是IActivityManager的具体实现。