正常情况的生命周期分析

七大生命周期

正常情况下 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. Ubuntu16.04如何彻底删除Apache2
  2. 牛人推荐机器学习网站
  3. 第二阶段冲刺 站立会议03
  4. 关于vue项目中添加less,less-loader不能运行的问题
  5. 2018全球大学AI排名发布,中国高校表现强势!
  6. 学影视模型还是游戏模型更有前景?
  7. 已知文件url,批量下载文件
  8. 微信小程序自定义Dialog弹框
  9. 全外显子组生信分析流程-4-数据质控
  10. NLP中Tokenizers总结(BPE、WordPiece、Unigram和SentencePiece)
  11. 光学元件生产工艺流程
  12. expdpimpdp使用remap
  13. 训练分类器OpenCV(3.4.1) Error: Assertion failed错误解决
  14. 那个时候我不小心建立了一个间谍应用
  15. sws_kp操作(selenium webdriver+python)
  16. CodingTrip - 携程编程大赛 (预赛第二场)
  17. Scala与Java语言的差异
  18. 叔本华《作为意志和表象的世界》
  19. 通过3D打印自动售货机来定制你的食物
  20. VMWare使用host-only网络连接总结

热门文章

  1. NM网络管理dbc中信号属性
  2. MMCV——build_norm_layer
  3. 一次手工注入waf [转载]
  4. deepin linux桌面环境,如何在Ubuntu上安装Deepin桌面环境
  5. 亲子拍拍v1.2.1官方iPhone版
  6. 某智能开关改造与二次设计
  7. PLMN=46004是中国移动的SIM卡
  8. 单片微型计算机原理及应用第三版答案胡乾斌,单片微型计算机原理-胡乾斌--课后习题答案...
  9. LTE同步技术(一)
  10. 物联网介绍及RFID