最近在看任玉刚老师的开发艺术探索,记录一下。
Android生命周期分为两部分:
一、典型情况下的生命周期。
二、异常情况下的生命周期。

一、典型情况下的生命周期

典型情况下的生命周期指在有用户参与的情况下,Activity所经过的生命周期的改变,正常情况下,Activity的常用生命周期就只有下面七个。

/*1.onCreate:每个Activity在写代码的过程中都会看见这个函数,是声明周期的第一个方法。一般做一些资源和数据初始化的工作,比如绑定相对应的资源布局setContentView*/@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*2.onRestart:字面意思表示Activity重新启动,这个状态一般由用户切换应用的行为产生,比如从应用切换到桌面或者切打开新的Activity,此时这个Activity就会调用onPause和onStop让这个Activity进入展厅状态。再回到这个Activity就是onRestart了*/@Overrideprotected void onRestart() {super.onRestart();}/*3.onStart:这个状态我理解就是Activity启动中的一个过程,就是启动中,但是还不能与用户交互(用户不可见),属于一个在后台的状态*/@Overrideprotected void onStart() {super.onStart();}/*4.onResume:表示Activity已经可见,且已经开始活动。与onStart类似的状态但是就是属于一种在前台的状态*/@Overrideprotected void onResume() {super.onResume();}/*5.onPause:是一个非常微妙的状态,处于正在停止的一个临界点,就很难重现这种状态,就是在停止过程中,先执行onPause然后在onStop执行之前,回到Activity执行onResume,这期间就是onPause的状态。此处可以做一些存储数据停止动画的工作,但是不能太耗时,不然会影响到新Activity的显示,只有这些操作做完,新Activity的OnResume才会执行。*/@Overrideprotected void onPause() {super.onPause();}/*6.onStop:表示Activity即将停止,可以做一些相对重量级的回收工作,同样不能太耗时。*/@Overrideprotected void onStop() {super.onStop();}/*onDestroy表示Activity即将被销毁,这是Activity生命的尽头,可以做一些回收工作和资源的释放。*/@Overrideprotected void onDestroy() {super.onDestroy();}


1、onStart 和 onResume、onPause 和 onStop 从描述上看差不多,对我们来说有什么实质的不同呢?
   从实际使用过程中来说,onStart 和 onResume、onPause 和 onStop看起来的确差不多,甚至我们可以只保留一对,比如只保留 onState 和 onStop。既然如此,那为什么 Android系统还要提供看起来重复的接口呢?根据上面的分析,我们知道,这两个配对的回调分别表示不同意义,onState 和onStop 是从 Activity 是否可见这个角度来回调的,而 onResume 和 onPause 是从 Activity 是否位于前台这个角度来回调的,除了这种区别,在实际使用中没有其他明显区别。

2.假设当前Activity为A,如果这时用户打开了一个新的活动B,那么B的onResume和A的onPause谁先执行呢?
   我们可以从Android源码里得到解释,A的onPause执行后B的onResume才会被调用。从另一个角度来说Android的官方文档中对onPause有这样一句解释:不能在onPause里进行重量级操作,因为必须在onPause执行过后,新的Activity才能Resume。

二、异常情况下的生命周期

   onSaveInstanceState方法只会出现在 Activity被异常终止的情况下,它的调用时机是在 onStop之前,它和onPause方法没有既定的时序关系,可能在它之前,也可能在它之后。当 Activity被重新创建的时候, onRestoreInstanceState会被回调,它的调用时机是 onStart之后。系统只会在 Activity即将被销毁并且有机会重新显示的情况下才会去调用 onSaveInstanceState方法。当 Activity在异常情况下需要重新创建时,系统会默认为我们保存当前 Activity的视图结构,并且在 Activity重启后为我们恢复这些数据,比如文本框中用户输入的数据、listview滚动的位置等,这些 view相关的状态系统都会默认为我们恢复。具体针对某一个 view系统能为我们恢复哪些数据可以查看 view的源码中的onSaveInstanceState和 onRestoreInstanceState方法。
   关于保存和恢复 View 的层次结构,系统工作流程是: Activity 异常终止, Activity 调用 onSaveInstanceState 去保存数据,然后 Activity 会委托 Windows 去保存数据,接着 Window 再委托它上面的顶层容器去保存数据。顶层容器是一个 ViewGroup ,一般来说它很可能是 DectorView ,最后顶层容器再去通知它的子元素保存数据。(这是一种委托思想,上层委托下层,父容器委托子元素去处理事情,如 View 的绘制过程,事件分发都是采用类似的思想)

Android生命周期详解相关推荐

  1. Android面试之Activity生命周期详解

    Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...

  2. Android Activity 生命周期详解及监听

    前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...

  3. Fragment的懒加载与生命周期详解

    提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...

  4. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  5. vue 声明周期函数_Vue 生命周期详解

    Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...

  6. 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记

    01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...

  7. taro生命周期详解

    taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...

  8. Eclipse中Maven常用命令以及Maven生命周期详解

    Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...

  9. Spring 生命周期详解

    Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...

最新文章

  1. (技能篇)双机热备之Oracle切换故障处理
  2. 双剑合璧————Spring Boot + Mybatis Plus
  3. 《计算机网络》第二章:物理层(The Physical Layer)
  4. 判断浏览器 插件 jquery.ua.js
  5. 百度北汽结盟:2021年量产L4级无人车
  6. 外贸企业员工上演”无间道” 商业秘密保护乏力
  7. linux 存文件格式,windows保存的文件传输到linux中格式转换
  8. 小记 -- cadence安装记录
  9. 迅雷5官方最新版免费下载
  10. nf_regester
  11. Java传输文件使用Base64优化传输速率。
  12. openGL学习之旅(一)DEV-C++安装GLUT
  13. IO流(包含常用IO体系图)
  14. MSP430F149学习之IO端口
  15. mac下的insert键
  16. 2021年,学UI设计还吃香吗?
  17. Python 基于tkinter和sqlite3的会员管理系统
  18. java堆内存设置_java堆内存设置原理
  19. LaTex:实现在Springer可以使用bibtex自动生成引用文献,而不用写Bibitem
  20. 学习Three.js——后期处理(EffectComposer)

热门文章

  1. 【技术文档】centernet(姿态估计)
  2. DS1302基本的读写
  3. Netlogon漏洞复现
  4. VBA word 常用代码及注释
  5. ROS自主导航学习———ROS通信机制
  6. 【第十三届蓝桥杯C++ B组省赛编程题详解】
  7. Error: watch task has to be a function(optionally generated by using gulp.parallel or gulp. series)
  8. Excel根据名字批量插入图片
  9. java毕业生设计超市货品进销存系统前台计算机源码+系统+mysql+调试部署+lw
  10. 什么是数据不平衡问题,应该如何解决