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的具体实现。

05-02 01:04