正常情况的生命周期分析

七大生命周期

正常情况下 Activity 的常用生命周期就是上面7个,下面是各种生命周期的切换过程:

分析上图:

  1. 针对一个特定的 Activity ,第一次启动,回调如下:onCreate->onStart->onResume。
  2. 当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause->onStop。这里有一种特殊情况,如果新Activity采用了透明主题,那么当前Activity不会回调 onStop 。
  3. 当用户再次回到原Activity时,回调如下:onRestart->onStart->onResume。
  4. 当用户按back键回退时,回调如下:onPause->onStop->onDestroy。

问题分析


通过分析源码,在新Activity启动之前,栈顶的Activity需要先 onPause 后,新Activity才能启动执行onCreate->onStart->onResume,然后Activity A才能执行onStop。

因此为了能让新Activity能快速显示出来,我们不能在 onPause 中执行耗时操作,应尽量在 onStop 中执行。

异常情况下的生命周期分析

资源相关配置发生改变导致 Activity 被杀死并重新创建

如果我们的 Activity 不做特殊处理,当系统配置发生改变后,Activity 就会被销毁并重新创建,其生命周期如图:

分析异常情况下 Activity 的重建过程:

在 onSaveInstanceState 和 onRestoreInstanceState 方法中,系统自动为我们做了一定的恢复工作。当 Activity 在异常情况下重建时,系统会默认为我们保存当前 Activity 的视图结构,并且在Activity重启后为我们恢复这些数据,比如文本框中用户输入的数据、ListView 滚动的位置等,这些 View 相关的状态系统都能够默认为我们恢复。

关于保存和恢复 View层次结构,系统的工作流程是这样的:

资源内存不足导致低优先级低的 Activity 被杀死

这种情况的数据存储和恢复过程和上述完全一致。

这里说明以下 Activity 的优先级情况。Activity 按照优先级从高到低,可以分为如下三种:

配置文件发生改变但要防止 Activity 重新创建

可以给 Activity 指定 configChanges 属性。比如不想让 Activity 在屏幕旋转的时候重新创建,就可以给 configChanges 属性添加 orientation 这个值,如果想指定多个值,可以用" | "连接起来,如下:

介绍系统配置中每个项目的含义:

添加 configChanges 属性后,Activity 在异常情况下不会重新
创建,并且也没有调用 onSaveInstanceState 和 onRestoreInstanceState 来存储和恢复数据,取而代之的时系统调用了 Activity 的 onConfigurationChanged 方法,我们可以在这个方法中做一些自己的特殊处理。

生命周期--艺术探索相关推荐

  1. Vue 生命周期篇探索 - 第二篇:生命周期-挂载流程

    文章目录 探索学习 Vue 生命周期篇 第二篇:生命周期-挂载流程 以图例分析挂载流程 1. new Vue 2. init Events & Lifecycle 3. beforeCreat ...

  2. Vue 生命周期篇探索-第三篇:生命周期-更新流程

    文章目录 探索学习 Vue 生命周期篇 第三篇:生命周期-更新流程 生命周期-更新流程 1. mounted(挂载后) 2. beforeUpdate (更新前) 3. Virtual DOM re- ...

  3. jsonp react 获取返回值_谈谈对 React 新旧生命周期的理解

    前言 在写这篇文章的时候,React 已经出了 17.0.1 版本了,虽说还来讨论目前 React 新旧生命周期有点晚了,React 两个新生命周期虽然出了很久,但实际开发我却没有用过,因为 Reac ...

  4. 干货 | Elasticsearch 索引生命周期管理 ILM 实战指南

    1.什么是索引生命周期? 关于人生,有人这么说:"人,生来一个人,死去一个人,所以,人生就是一个人生老病死的简称." 在基于日志.指标.实时时间序列的大型系统中,集群的索引也具备类 ...

  5. Elasticsearch ILM 索引生命周期管理常见坑及避坑指南

    之前的博文和视频都讲过 ILM 索引生命周期管理.但从近期的反馈和我自己的实战经验看,依然会有很多坑. 现将我自己和大家遇到的常见坑汇集如下,希望能让后来小伙伴少走弯路. 少啰嗦,直接上干货. 坑1: ...

  6. pAdPt_-9 活动的生命周期[LogCat java关键字] 传递数据[Intent 静态变量 全局变量 剪切板]

    2015.11.13-11.17 平台. Windows 10 Android Studio 1.3.2 看"Android.老罗"的笔记以为Android开发入门的好瓜笔记,笔记 ...

  7. Android开发艺术探索笔记(一) Activity的生命周期和启动模式(1)

    Activity作为Android开发中最常用的一个组件,是Android开发人员必须熟悉且掌握的重要内容.同时Activity也是在面试中经常被问到的一个方向.因此,掌握Activity的重要性也不 ...

  8. 四大组件之activity生命周期探索

    在android开发中,activity可以说是我们见过的最多的组件了,我们平常app的界面都是通过activity来展现在我们面前的,可以包含多种用户界面的组件,主要用于和用户进行交互.一个应用程序 ...

  9. 探索TCP状态机之旅:发现网络连接的生命周期与神秘魅力

    目录标题 前言 TCP状态简介 TCP状态机的目的与功能 TCP状态在连接建立.数据传输和连接关闭过程中的作用 TCP状态详解 LISTEN:服务器监听来自客户端的连接请求. SYN\_SENT:客户 ...

最新文章

  1. 创建Student Course SC表
  2. yum update upgrade 区别_CentOS与RedHat的区别
  3. JDK源码阅读调试环境搭建
  4. WIN10访问linux分区「ext2fsd」
  5. 做本地服务业O2O要点有哪些 O2O营销模式未来发展趋势是什么?
  6. week15(字符串集合:Hash、字典树、KMP)
  7. 使用wps将excel中的行转列(转置)
  8. 添加CNZZ统计代码
  9. 编程猫李天驰:让编程教育回归互联网
  10. 有关javaSE下载时,环境配置path不成功,在cmd命令中java,javac,java -version出现不是内部或外部命令的现象处理
  11. java星号心形代码_c语言实现星号爱心的代码
  12. python去除图片背景(透明色)
  13. python界面编程
  14. 本机访问VMware虚拟机中网页的方法
  15. 超级计算机浪漫展览,银河的浪漫-星星
  16. 武汉软件工程职业学院普通话测试站,湖北普通话测试中心地址及联系方式一览表(65个)...
  17. 2022年登高架设考试题模拟考试题库及模拟考试
  18. [经验分享] 安装Windows系统遇到的一系列问题排查
  19. Lightning 0.5 Chinese Language package
  20. 【因果推断与机器学习】Causal Inference: Chapter_1

热门文章

  1. 存储计算机当前正执行的应用程序,存储计算机当前正在执行的应用程序和相应的数据的存储器是什么...
  2. Win7 64bits、VS2010、安装OpenSSL
  3. html导航栏圆角,纯css实现蓝色圆角效果水平导航菜单代码
  4. jq实现页面滑动到一定位置显示返回顶部按钮,点击回到页面顶部
  5. 路由向html发送信息,使用(40)方式可以阻止从路由器接口发送路由更新信息。A.重发布B.路由归纳C. - 信管网...
  6. IDEA 轻松实现线上debug 调试
  7. TSMC28nm spice仿真
  8. oracle清理undo空间,删除Oracle Undo表空间
  9. 卸载联软UniAccess,删除UniAccess Agent记录
  10. 免费主机屋空间mysql和mssql数据库备份和还原技巧