四大组件Activity的工作过程
来源:互联网 发布:模块化编程的好处 编辑:程序博客网 时间:2024/06/06 10:34
由于Android系统内部对Activity做了封装,使得调用很方便,而且显式调用只要两行代码就能搞定:
Intent intent = new Intent(this, OtherActivity.class);startActivity(intent);
尽管Activity内部的具体实现很复杂,但是掌握一个大概的流程还是必要的,具体如下:
1、startActivity有好几种重载方式,但是最终都会调用startActivityForResult()
startActivityForResult()内部调用Instrumentation的execStartActivity()2、execStartActivity()调用ActivityManagerNative.getDefault().startActivity()
ActivityManagerNative继承Binder并实现了IActivityManager接口,而ActivityManagerService继承了ActivityManagerNative,所以ActivityManagerNative.getDefault()获取的就是ActivityManagerService对象,用来启动Activity。3、startActivity()中调用ActivityStackSupervisor.startActivityWait()
startActivityWait()内部调用startActivityLocked()->startActivityLocked()->startActivityUncheckedLocked()->ActivityStack的resumeTopActivityLocked()4、resumeTopActivityLocked()调用resumeTopActivityInnerLocked()
内部调用ActivityStackSupervisor的startSpecificActivityLocked(),startSpecificActivityLocked()内部调用realStartActivityLocked()5、realStartActivityLocked()调用app.thread.scheduleLaunchActivity()
app.thread就是ApplicationThread,ApplicationThread继承了ApplicationThreadNative,而ApplicationThreadNative继承了Binder并实现了IApplicationThread接口,scheduleLaunchActivity()内部使用Handler来处理消息。6、Handler接收到LAUNCH_ACTIVITY这个消息后,调用handleLaunchActivity(),然后内部调用performLaunchActivity()
performLaunchActivity()完成的任务:- 1)从ActivityClientRecord中获取待启动的Activity的组件信息
- 2)通过Instrumentation的newActivity()使用类加载器创建Activity对象
- 3)通过LoadedApk的makeApplication()来创建Application对象:
Application创建完毕后,系统会通过Instrumentation的callApplicationOnCreate方法来调用Application的onCreate方法。
- 4)创建ContextImpl对象并通过Activity的attach()来完成一些重要数据的初始化:
ContextImpl通过Activity的attach方法来和Activity建立关联,而且在attach方法中,Activity还会完成Window的创建并建立自己和Window的关联。
- 5)调用Activity的onCreate():
由于Activity的onCreate()已经被调用,这也意味着Activity完成了启动过程。
0 0
- 四大组件Activity的工作过程
- (十七)四大组件的工作过程-Activity
- 四大组件的工作过程
- 四大组件的工作过程
- Android四大组件的工作过程(一)-Activity的工作过程
- 9_四大组件的工作过程
- 九、四大组件的工作过程
- 第九章、 四大组件的工作过程
- 四大组件的工作过程探索(一)
- 【Android学习】四大组件的工作过程
- 读书笔记(9) 四大组件的工作过程
- Android 四大组件的工作过程
- 四大组件Service的工作过程
- 四大组件BroadcastReceiver的工作过程
- 四大组件ContentProvider的工作过程
- 第九章 四大组件的工作过程
- Android四大组件的工作过程
- [看书日记20160104]四大组件的工作过程, Activity的生命周期和启动模式
- Android中ListView与适配器ArrayAdapter,SimpleAdapter,定义BaseAdapter适配器,ListView添加headerView,ListView滚动到最后一项
- 导出页面div中的图
- 美团外卖手机网页版数据加密解析
- js中typeof与instanceof用法
- Android Fragment 真正的完全解析(下)
- 四大组件Activity的工作过程
- RecycleView添加分割线。
- ASCII,UNICODE与UTF-8
- 原生JS中如何获取CSS属性中的值
- kibana 报错 nested: FacetPhaseExecutionException Parse Failure [Failed to parse source
- 解决“Unable to find vcvarsall.bat”错误
- QUST'S OJ problem 1641错位的键盘
- HAProxy安装及配置
- maven手册篇