onCreate

表示Activity正在被创建,这是Activity 生命周期执行的第一个方法。可以做一些初始化的工作。
比如:加载布局文件、绑定控件、初始化数据等。
调用时机:Activity创建时调用,并且只会调用一次。

onStart

表示Activity正在被启动,此时Activity处于可见状态,但是还没有焦点,不能与用户进行交互。
源码中有这么一句话  drawing visual elements, running animations, etc.
翻译过来就是绘制视觉元素、运行动画等。
调用时机:紧跟onCreate()之后,Activity由不可见变为可见状态时调用。

onResume

表示Activity已经已经获得了焦点,可以与用户进行交互。
可以做一些刷新页面的操作,比如重新发送接口请求获取最新数据等。
调用时机:onStart之后,当Activity每次到前台时调用。

onPause

表示Activity已经失去焦点,不可与用户进行交互。
调用时机:当Activity回到后台时调用。

onStop

表示Activity已经完全不可见了。可以做一些停止的工作,比如暂停动画、暂停视频的播放、暂停banner的轮播等。
调用时机:当Activity不可见时候被回调。

onDestory

表示Activity已经被销毁,可以做一些回收的工作。比如 bitmap的回收,对象的置空,curosr的关闭等。

onRestart

表示Activity重新回到前台,接下来调用onStart、onResume。
调用时机:当Activity重新回到前台时回调。

流程图

此外还有两个特殊情况下会执行的生命周期onSaveInstanceState和onRestoreInstanceState。
将手机从竖屏切换到横屏时看下Activity执行的生命周期顺序。

再从横屏切换到竖屏看下Activity执行的生命周期顺序。

发现两次执行的生命周期是一致的。
按下Home键Activit的生命周期执行的顺序是这样的

再点击应用图标执行的生命周期是这样的


所以特殊情况下(屏幕旋转、按下home键盘) onSaveInstanceState是用来保存数据的,onRestoreInstanceState是用来恢复数据的。
看下代码

    @Overrideprotected void onSaveInstanceState(@NonNull Bundle outState) {super.onSaveInstanceState(outState);Log.d(TAG, "onSaveInstanceState");outState.putString(TAG,"保存的数据");}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(TAG, "onCreate");if(savedInstanceState != null){Log.d(TAG,"拿到了"+savedInstanceState.getString(TAG));}}@Overrideprotected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);Log.d(TAG, "onRestoreInstanceState");Log.d(TAG, "拿到了"+savedInstanceState.getString(TAG));}

打印信息:

可以看到正确保存和恢复了数据。
最后看一下当SecondActivity设置为singleTop启动模式,在SecondActivity点击跳转SecondActivity时,代码如下:

  //点击跳转当前页面Intent intent=new Intent(SecondActivity.this,SecondActivity.class);intent.putExtra("SecondActivity","传递的数据");startActivity(intent);@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);Log.d(TAG, "onNewIntent");Log.d(TAG, intent.getStringExtra("SecondActivity"));}

打印如下:
看到并没有执行onCreate()和onStart()而是执行了onNewIntent()并且拿到了传递过来的数据。

异常情况下(注这里的MainActivity无论设置哪种启动模式,下面的MainActivity执行的生命周期是一样的)
MainActivity跳转SecondActivity执行的生命周期

SecondActivity空指针报错闪退回到MainActivity执行的生命周期

MainActivity重新启动了,实际上是应用重新启动了。比正常进入MainActivity多执行了一个onRestoreInstanceState()方法,并且拿到了之前保存的值。

总结

Activity是安卓四大组件之一,其重要性不言而喻。掌握Activity的生命周期对日常开发有很大的帮助,另外本文也是面试官非常爱问的面试题。

Activity生命周期和调用时机相关推荐

  1. Vue——生命周期钩子调用时机

    生命周期流程图 下图截自Vue官方文档 生命周期调用时机 生命周期钩子 调用时机 beforeCreate() 在实例初始化之后,数据观测(data observer)之前调用 created() 实 ...

  2. 从源码看 Activity 生命周期(上篇)

    本文是我的 AOSP 系列 第六篇文章,往期目录如下: Java 世界的盘古和女娲 -- Zygote Zygote家的大儿子 -- SystemServer Android 世界中,谁喊醒了 Zyg ...

  3. 详谈Activity生命周期函数调用时机

    再谈Activity生命周期(详细) @(Android基础)[Android全程实录读书笔记] Activity的3中状态: 激活: 完全显示在界面上, 并且有焦点, 即正在与用户交互 暂停: 不完 ...

  4. dialog 弹框时activity生命周期调用过程

    dialog 弹框时activity生命周期调用过程 这个问题,分两部分 在普通activity弹框dialog,activity的onPause方法会被调用吗? activity a中给dialog ...

  5. framework之Activity 生命周期解析(基于Android11源码)

    引言 上一篇讲了Activity的创建过程(没看过的小伙伴移步 点我前往).由于篇幅的问题,只分析到OnCreate周期,那这一篇就接着讲余下部分的周期. 在高版本上,activity的周期都是以事务 ...

  6. android代理生命周期,了解 Activity 生命周期

    当用户浏览.退出和返回到您的应用时,您应用中的 在生命周期回调方法中,您可以声明用户离开和再次进入 Activity 时 Activity 的行为方式.例如,如果您正构建流媒体视频播放器,当用户切换至 ...

  7. Android 组件系列-----Activity生命周期

    本篇随笔将会深入学习Activity,包括如何定义多个Activity,并设置为默认的Activity.如何从一个Activity跳转到另一个Activity,还有就是详细分析Activity的生命周 ...

  8. Android Activity生命周期管理

    http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...

  9. 喜闻乐见之Activity生命周期

    Activity的生命周期,对于Android开发者来说,再熟悉不过了.但是我们接触到的资料,绝大部分都只是谈了一些表面上的东西,例如各个回调的顺序等等.本文试图换个角度来讲解,也希望对各位读者有所帮 ...

最新文章

  1. h3c交换机端口加入vlan命令_华为交换机批量加入 Vlan 方法
  2. 本机向windows服务器传输文件的三种方法
  3. 多个mysql 环境_关于几个MySQL环境问题的对比
  4. 使用Reactor进行反应式编程最全教程
  5. c c 语言写的四六级词汇系统,2020英语四六级词汇积累:以c开头的单词(二)
  6. 8除以2表示什么意思_平均配速8'12'是什么意思
  7. 【Ubuntu】Ubuntu16.04配置python环境(vim、ipython)
  8. ChannelHandler揭秘(Netty源码死磕5)
  9. 新人如何适应自己的领导
  10. Windows 上的高效启动器—— Listary
  11. python万年历差农历程序_批处理万年历实现代码(包括农历日期)
  12. Arcanist用法简介
  13. ISP成像算法基础Day1—Python基础
  14. JsonParser
  15. 信息系统面临的安全威胁
  16. SpringBoot + Spring data JPA使用方言(自定义函数、一些自带函数)
  17. 、OA系统中的绩效管理
  18. laravel 系统服务-助手函数
  19. 文件创建时间、修改时间、访问时间的定义
  20. JAVA线程池原理-1

热门文章

  1. 非常有助于理解二极管PN结原理的资料
  2. 数据库——SQL语句与数据库设计
  3. 考研复试--数据链路层--计算机网络面试题
  4. 网站制作流程及界面交互设计研究探讨
  5. opencv 脸部识别_实时面部识别如何与OpenCV一起使用?
  6. html select更改箭头样式,下拉列表-select样式css处理,可改变箭头的颜色
  7. 微信小程序 自定义搜索框并关键字高亮
  8. MPI实现矩阵向量乘法
  9. 局域网限制网速软件_Oka WiFi测网速 for Mac(网络测速软件)
  10. 虚假新闻检测,来自美团NLP团队方案