(十七)四大组件的工作过程-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方法。
阅读全文
0 0
- (十七)四大组件的工作过程-Activity
- 四大组件Activity的工作过程
- Android四大组件的工作过程(一)-Activity的工作过程
- 四大组件的工作过程
- 四大组件的工作过程
- 第九章四大组件的工作过程(一)Activity的工作过程(Android开发艺术探索)
- (十八)四大组件的工作过程-Service
- (十九)四大组件的工作过程-BroadcastReceiver
- (二十)四大组件的工作过程-ContentProvider
- 9_四大组件的工作过程
- 九、四大组件的工作过程
- 第九章、 四大组件的工作过程
- 四大组件的工作过程探索(一)
- 【Android学习】四大组件的工作过程
- 读书笔记(9) 四大组件的工作过程
- Android 四大组件的工作过程
- 四大组件Service的工作过程
- 四大组件BroadcastReceiver的工作过程
- leetcode[Hamming Distance]//待整理多种解法
- 走进java_类加载器 与 双亲委派模式
- 最大流之Ford-Fulkerson算法
- 性能调优(一)----Amdahl定律及木桶原理
- #!/usr/bin/env python与#!/usr/bin/python的区别
- (十七)四大组件的工作过程-Activity
- hdu 6050 Funny Function (数学题+快速幂)
- 大数据 (五)Hadoop-HDFS zookeeper和Hadoop-HDFS的集成
- JPA SQL查询
- 域名juying.org接广告
- R语言summary()报错object of type 'closure' is not subsettable的原因
- 二叉树的遍历
- hdu 2040 亲和数
- 2017年最受开发者欢迎的10个Linux发行版