首页 > 学院 > 开发设计 > 正文

Activity启动过程分析

2019-11-07 23:02:37
字体:
来源:转载
供稿:网友

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 创建特殊的单例模式


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表