onCreate源码分析
原文地址Android面试题-onCreate源码都没看过,怎好意思说自己做android
Activity扮演了一个界面展示的角色,堪称四大组件之首,onCreate是Activity的执行入口,都不知道入口到底干了嘛,还学什么android,所以本文会从源码的角度对其进行分析。
熟悉源码的会发现,真正启动Activity的实现都在ActivityThread,前面的调用过程略过
ActivityThread的方法performLaunchActivity中调用了Instrumentation类中的方法callActivityOnCreate方法,继而调用了TargetActivity中的onCreate方法。
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) { ...... Activity activity = null; activity = mInstrumentation.newActivity( cl, component.getClassName(), r.intent); ...... if (r.isPersistable()) { mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState); } else { mInstrumentation.callActivityOnCreate(activity, r.state); } ...... }
源码可知:
1)通过反射的机制创建的Activity
2)这里的mInstrumentation是类Instrumentation
3)Instrumentation类中的方法callActivityOnCreate方法源码如下:
public void callActivityOnCreate(Activity activity, Bundle icicle) { prePerformCreate(activity); activity.performCreate(icicle); postPerformCreate(activity); }
源码可知:
1)activity.performCreate(icicle),其中的方法是通过activity,这个activity,形如:Activity activity = 子Activity的对象
2)在Activity类中的方法performCreate(icicle),源码如下:
final void performCreate(Bundle icicle) { onCreate(icicle); mActivityTransitionState.readState(icicle); performCreateCommon(); }
源码可知:
1)原来onCreate的生命周期方法是在这里回调的
2)在performCreate方法中调用的onCreate方法是MainActivity中的onCreate方法,那么到此MainActivity中的方法onCreate方法中的参数Bundle savedInstanceState也就知道来源了,此时,MainActivity中的方法也就被调用了。
再次看MainActivity中的方法onCreate:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
至此onCreate源码分析完毕。
相关文章
- Spring Framework 源码学习笔记(六)
- Go-Excelize API源码阅读(十四)——GetSheetFormatPr
- 在线客服系统源码开发实战总结:Golang实现CMS内容管理增删查改功能
- vue源码分析-响应式系统(二)
- @Transactional TransactionManager 源码分析「建议收藏」
- 从源码角度查看SpringBoot是怎样获取到Bean的
- golang源码分析:dtm分布式事务(5)
- 去中心化互助公排循环游戏dapp系统开发合约部署(案例源码)
- golang源码分析:分布式链路追踪
- React源码分析(一)Fiber3
- 基于Unittest框架,使用Python+Selenium+Webdriver的WebUI自动化测试项目应用实例(附源码)
- React源码分析7-state计算流程和优先级_2023-02-21
- 4. 「snabbdom@3.5.1 源码分析」内置模块
- 2. 「snabbdom@3.5.1 源码分析」h函数 和 虚拟DOM
- 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★
- 【Android 启动过程】Activity 启动源码分析 ( ActivityThread -> Activity、主线程阶段 二 )
- SkeyePlayer rtsp播放器源码解析之64位编译方案
- 开源权力:linux播放器的源码分析(linux 播放器源码)