自定义控件

联网

工具

数据库

源码分析相关面试题

Activity相关面试题

Service相关面试题

与XMPP相关面试题

与性能优化相关面试题

与登录相关面试题

与开发相关面试题

与人事相关面试题

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);

super.onCreate(savedInstanceState),其实这条语句放在子类中的onCreate方法中的任何位置都可,问题只是super.onCreate(savedInstanceState)必须要被执行,所以,最好也就是放在第一行,看起来比较明确,至于为什么,参考onSaveInstanceState源码分析

至此onCreate源码分析完毕。

欢迎关注微信公众号,长期推荐技术文章和技术视频

微信公众号名称:Android干货程序员

android面试 源码,Android面试题-onCreate源码都没看过,怎好意思说自己做android-Go语言中文社区...相关推荐

  1. java以太坊源码分析_以太坊区块链Java(EthereumJ)学习笔记:区块链结构-Go语言中文社区...

    本文对EthereumJ的区块链相关的代码做一个简单的介绍. 以太坊区块链 以太坊区块链是在Bitcoin区块链的基础上发展起来的.区块链的数据结构既保留了Bitcoin区块链验证数据的真实性和完整性 ...

  2. 10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对

    10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对 Java高级架构 有一天,小王告诉我,他去一家公司面试 Java 岗,结果被面试官虐哭了.整整 10 道 Java 面试题,小王一道也没答 ...

  3. 2022年最新Android面试题整理,全网都在看,史上最全面试攻略

    Android面试现在什么东西是必须考察的?专业素养还是面试技巧?四大组件还是Framework层源码?哪有什么必考的,可以说所有技术栈都不是必考,但又是必考.话虽看似矛盾,但却反映了当前国内互联网环 ...

  4. 连Spring源码都没看过,你怎么敢在简历上写“精通”?

    小A 你好面试官,非常高兴能参加今天的面试 面试官 没事,先做一个自我介绍吧 小A 我叫小A,工作三年了,做过...... 面试官 嗯,好的,看到你的项目这块,在公司主要用的就是spring全家桶相关 ...

  5. android tun0 流量统计,Android应用流量统计——NetworkStatsManager使用-Go语言中文社区...

    在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合.最近再看T ...

  6. glide源码中包含了那种设计模式_腾讯阿里华为小米等大厂Android高端面试题145题(含部分详解)-Go语言中文社区...

    前言 本篇是结合我之前面试别人的经验,以及跟一些在大厂待过的朋友,讨论总结出的一份很全面的大公司需要用到的一些高端Android技术.这里也专门整理了一个文档,重点和难点都有详细解析. 这些题目有点技 ...

  7. Android 面试 - 有关Service的面试题

    1.Service是什么 Service(服务)是一个可以在后台执行长时间运行操作而没有用户界面的应用组件. 注:Service是运行在主线程中的,不能进行耗时操作 2.Service和Thread的 ...

  8. 国内下载android源码,Android国内源码下载——亲测成功-Go语言中文社区

    一.工具准备 首先安装git和curl工具 sudo apt-get install git-core curl 然后通过curl下载repo并配置repo mkdir ~/bin echo &quo ...

  9. Spring都没弄明白凭什么拿高薪,Android研发岗面试复盘总

    前言 随着移动网络的不断升级,客户端的网络传输由3G进化到Wifi.4G.5G,且Wifi场景越来越多.虽然网络环境在变好,但也对网络的应用提出了更高的要求,会发现很多大厂都十分重视网络指标,如果技术 ...

最新文章

  1. 继承、实现、依赖、关联、聚合、组合的联系与区别
  2. sqlalchemy mysql_SQLAlchemy简明教程
  3. 新网站如何在最短的时间内提升排名呢?
  4. 阿里、小米、美团或将入恒指,但这还远远不够!
  5. 解题报告 Number
  6. 由浅到深理解ROS(3)-命名空间
  7. 一文带你全面了解java对象的序列化和反序列化
  8. hdfs存储与数据同步
  9. sha java 应用_Java中常用的加密算法应用MD5,SHA,RSA
  10. Spring @Scheduled定时任务调度配置的详解
  11. net core获取客户端ip
  12. 安卓6.0的闹钟问题及解决
  13. 刀与剑-C++ COM组件调用
  14. mysql 多数据源配置文件_Spring+MyBatis多数据源配置实现
  15. 雷神电脑 ST-plus windows10+ubuntu16.04 双硬盘 双系统超详细安装
  16. MATLAB---构造一个插值三次样条曲线
  17. Linux 的体系结构结构
  18. 5、唯一约束(UNIQUE KEY)
  19. 登录超时连不上信息服务器,我的侠客进不去怎么办 服务器登录连接超时请稍后再试解决方法...
  20. JavaScript比较两个数字的大小

热门文章

  1. 超 6 万的微软工程师是如何进行代码审查的?| CSDN 博文精选
  2. Python 绘图,我只用 Matplotlib
  3. @程序员,你知道大厂是如何招聘到优秀项目经理的吗?
  4. 一顿操作猛如虎!云原生应用为何如此优秀?
  5. 京东或将裁员 12000 人!雷军年薪百亿;马云:阿里没人敢跟我打赌 | 极客头条
  6. 人工智能究竟会不会让程序员失业?
  7. 中兴有救了!百度又要 All in 视频?联想回应“反对预装国产系统” | CSDN极客头条...
  8. 207 台服务器被种植木马,谁害死了“旧”乐视?
  9. 第 1 章 MySQL 的架构介绍
  10. docker hub mysql主从_使用 Docker Compose 搭建 MySQL 数据库主从复制实例