(十七)四大组件的工作过程-Activity

来源:互联网 发布:矩阵的奇异值有0吗 编辑:程序博客网 时间:2024/06/04 18:00
Activity的工作过程
从startActivity()方法分析,他有多种重载方法,最终都会调用startActivityForResult(Intent intent,int requestCode,Bundle options)方法,在此方法中会判断mParent对象是否为空,为空进行启动逻辑,调用Instrumentation的execStartActivity方法,需注意mMainThread.getApplicationThread()这个参数,它是ApplicationThread类型,继承自ActivityThread。在该方法中启动Activity的真正实现是由ActivityManagerNative.getDefault的startActivity方法来完成的。ActivityManagerService继承自ActivityManagerNative,ActivityManagerNative 继承自Binder并实现了IActivityManager接口。AMS通过单例对外提供,首次调用get方法会通过调用create方法初始化AMS的对象。之后会有checkStartActivityResult方法,在此方法中会检查Activity的启动状态,常见的“没在清单文件中声明Activity的异常就是此时抛出”。
至此,Activity的启动又回到AMS的startActivity方法中。
AMS的startActivity方法返回startActivityAsUser方法,在这个方法中的调用ActivityStackSupervisor的startActivityMayWait方法,在startActivityMayWait中又调用startActivityLocked方法,接着又调用了startActivityUncheckedLocked方法,在此方法中有调用了ActiviyStack的resumeTopActivitiesLocked方法,这个时候,启动Activity就转移到了ActivityStack。在ActivityStack中,调用了resumeTopActivityInnerLocked方法,在这个方法中,又会调用ActivityStackSupervisor的startSpecificActivityLocked方法,在这个方法中又调用了realStartActivityLocked方法,在该方法中又一段代码:app.thread.scheduleLauncherActivity()方法。




从AMS的startActivity方法开始流程:



app.thread的类型是IApplicationThread类型,他的具体实现类是ActivityThread中的内部类ApplicationThread,继承关系为:
ApplicationThread extends  ApplicationThreadNative extends  Binder  implements IApplicationThread。
最后Activity的启动过程又回到了ApplicationThread中,ApplicationThread通过scheduleLauncherActivity方法来启动Activity,在scheduleLaunchActivity方法中发送一个启动Activity的消息由Handler处理(H),在Handler中通过ActivityThread的handleLaunchActivity方法来实现Activity的启动,在handleLaunchActivity中又会调用performLauncherActivity方法完成Activity的启动,并且通过handleResumeActivity方法来调用被启动Activity的onResume这一生命周期方法。
在performLaunchActivity方法中完成了以下几件事:
1.从ActivityClientRecord方法中获取待启动的Activity的组件信息。
2.通过Instrumentation的newActivity方法使用类加载器创建Activity对象
3.通过LoadedAp的makeApplicstion方法来尝试创建Application对象(Application创建完后,会调用Instrumentation的callApplicationOnCreate来调用Application的onCreate方法)
4.创建ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化(ContextImpl是一个很重要的数据结构,是Context的具体实现)
5.调用Activity的onCreate方法,调用Instrumentation的callActivityOnCreate方法。









原创粉丝点击