Activity 的启动流程

1 startActivity和startActivityForRescult(),然后走到Instrumatation中的 execStartActivity(),改方法调用到ActivityManagerNative.getDefault().startActivity() 的方法,因为AMS 也是个binder是实现IActivityManager的接口的具体子类,最终调到AMS 中去

2   经过一系列的回调,最终IApplicationThread 接口中,该接口中这个接口也是继承自IInterface 接口,它是作为服务端接收AMS 的指令并且执行,是ActivityThread AMS链接的桥梁,因为AMS管理Activity的生命周期和栈,需要和应用程序交互,所以需要ApplicationThread对象

3  最后会回调到ApplicationThread 类中的scheduleLaunchActivity这个Handler 类发送了一个message,然后调用 handleLaunchActivity()。然后调用 performLaunchActivity()这个方法

主要做的事情是

1,将ActivityClientRecord中获取待启动的Activity 的组件信息,

2 通过Instrumentation的newActivity的使用方式使用类的加载器创建Activity对象,

3通过LoadedApk 的makeAppliction方法去创建Appication 对象。

4 创建ContextImpl对象并通过Activity的attach 方法完成一些重要数据的初始化。

5 调用Activity 的onCreate 方法。

猜你喜欢

转载自blog.csdn.net/ahubenkui/article/details/81273263