1.典型情况下的Activity的生命周期

1.1 所谓的典型情况下的Activity的生命周期,是指用户参与的情况下.即用户正常使用app应用的时候正常执行的activity的生命周期.
1.2 在正常的情况下,Activity会经历如下的生命周期.

1>onCreate() -> 表示Activity正在被创建,这是生命周期的第一个方法.一般只会在Activity被创建的时候执行一次.
在这个方法中,我们可以做一些初始化的工作,例如setContentView()去加载布局,初始化布局所需控件,以及初始化Activity所需数据等.

2>onRestart()-> 表示Activity正在重新启动.这个方法执行的前提是Activity已经被创建过,并且在当前的Activity从不可见重新
变为可见的时候会调用onRestart()方法.这种情况一般是由按下HOME键盘,或者启动两外一个Activity之后,当前的Activity
就会执行onPause() -> onStop()方法,而后它又回到当前的Activity,则就会执行 onRestart() -> onStart() -> onResume()

3>onStart()-> 表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户进行交互.
这个是Activity已经显示出来,只是我们还看不到.所以它一般是和onResume()方法一起来显示Activity

4>onResume()-> 表示Activity已经完全可见了,并且出现在前台开始活动.它和onStart()方法的主要区别是:
onStart()方法执行的时候Activity还在后台,而onResume()方法执行的时候Activity才显示到前台.

5>onPause()-> 表示Activity正在停止,正常情况下,紧接着Activity的onStop()就会被调用.但是有一些特殊的情况.
例如弹出一个对话框的时候,这个时候就不会执行onStop()方法,因为当前的Activity()仍然是部分可见的.如果
这种情况下再回到当前的Activity就会直接调用onResume()方法.
在onPause()方法中,可以做一些存储数据,停止动画等工作,但是注意不能太耗时,因为这样会影响到新的Activity的显示.
onPause()必须先执行完之后,新的Activity的onResume()方法才会执行.

6>onStop()-> 表示Activity已经不可见了,Activity即将停止,可以做一些稍微重量级的工作,同样不能太耗时.

7>onDestroy()-> 表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,在这里我们可以做一些回收
工作和一些资源释放.

1.3 针对这张图,附加解析如下:
1> 针对一个特定的Activity,第一次启动的时候,回调如下:
onCreate() -> onStart() -> onResume().
2>当用户打开新的Activity或者切换到桌面的时候.并且当前的activity完全不可见的情况下回调如下:
onPause() -> onStop(). 有一种特殊的情况,如果新的Activity是透明的,则不会回调onStop()方法.
3>当用户再次返回到原来的Activity的时候,回调如下方法:
onRestart() -> onStart() -> onResume()
4>当用户按下back键的时候,回调如下方法:
onPause() -> onStop() -> onDestroy()
5>当Activity被系统回收后再次打开的时候,生命周期方法回调过程和<1>中的一样,生命周期方法一样,主要是参数不一样.
6>从整个生命周期来说:
onCreate() 和 onDestroy() 方法是配对的,它们之间所经历的代表一个Activity从创建到销毁一个完整的生命周期.
并且这两个方法,在一个Activity的生命周期当中只可能被调用一次.
从Activity是否可见来说:onStart()和onStop()是配对的,它们之间经历的是Activity的可见期.
从Activity是否在前台来说:onPause()和onResume()是配对的,它们之间经历的是Activity在前台的生存期.

1.4 onStart() 和 onResume, onPause()和onStop()从描述上差不多,它们之间到底有什么实质性的不同?
onStart() 和 onStop() 方法是针对Activity是否可见而设定的回调方法.
onResume和onPause() 方法是针对Activity是否在前台而设定的回调方法.
总体来说,一个Activity如果在前台,那么它必定是可见的.而有的Activity虽然可见但是并没有在前台运行.
没有获得焦点,这个时候就只能调用onPause(),而不能调用onStop()方法,因为onStop()方法一旦调用,
就标志着一个Activity就不可见了,这种情况下很有可能会影响用户体验.

1.5 假设当前的Activity A ,如果这个时候打开一个新的Activity B,那么B的onResume()方法和A的onPause()哪个先执行呢?
只有当Activity A 的onPause()方法执行完毕之后,新的Activity才会去执行 onCreate() -> onStart() -> onResume() 方法.
所以在onPause()方法中不宜执行耗时的操作,只适合做一些轻量级的任务.否则就会造成非常不好的用户体验.

2. 异常情况下Activity的生命周期

2.1 何为异常情况下的生命周期:
异常情况下的生命周期是指当前的Activity由于系统的资源不足可能被杀死,或者是当资源的系统配置文件改变造成Activity被杀死的情况

2.2 资源相关的系统配置文件发生改变导致Activity被杀死并重新创建:

第一章: Activity的生命周期和启动模式:相关推荐

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

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

  2. Activity的生命周期和启动模式--Activity的生命周期的全面分析

    本节将Activity的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期.所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity所经过的生命周期的改变 ...

  3. Activity生命周期和启动模式

    Activity生命周期和启动模式 1. 典型情况下的生命周期分析 完整生存期:onCreate()-onDestory(),分别标识着Activity的创建和销毁,并且只可能有一次调用. 可见生存期 ...

  4. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之启动一个Activity

    原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/index.html 导言 用户通过导航退出或者返回应用的时 ...

  5. 安卓学习笔记06:Activity生命周期与启动模式

    文章目录 零.学习目标 一.Activity生命周期 1.了解Activity生命周期 2.Activity生命周期简化图 (1)Activity存在与否 (2)Activity可见与否 (3)Act ...

  6. Activity详解Activity的使用步骤、生命周期及其启动模式、启动方法

    开始我们先来回顾一下Activity的基础知识: Activity是应用程序的表现层,应用程序中可以包含多个Activity,它们之间可以相互跳转,来达到手机屏幕的切换.Activity通过View来 ...

  7. Activity生命周期及启动模式详解

    1.Activity生命周期 1.正常情况: (1) onCreate: 表示 Activty 正在被创建,这是 Activity 生命周期的第一个方法,可以做一些初始化的工作,比如:加载布局,绑定控 ...

  8. Activity具体解释(生命周期、启动方式、状态保存,全然退出等)

    一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面. 在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的A ...

  9. Android开发---Activity的生命周期

    在Android开发中,第一步学习的应该是最基础的东西,即Activity的声明周期,相信Activity对于从事Android开发的朋友都很熟悉,这里作者不多做解释.Android的生命周期可以用如 ...

最新文章

  1. java之php、Android、JAVA、C# 3DES加密解密
  2. OSSIM系统——mysql的使用
  3. 使用 UIWebView 来播放视频
  4. ARM汇编:加载和存储指令集(六大类)---LDR(ADR)、LDRB、LDRH、STR、STRB、STRH
  5. Condition - Java多线程编程
  6. JS中的Replace方法
  7. python士兵突击_想自学Python进入该行业成为一名自己一直以来就很羡慕和钦佩的程序员,过来人的你有什么想分享的吗?...
  8. (转载)Ubuntu如何进入图形界面
  9. AndroidのTextView之CompoundDrawable那些坑
  10. docker之SonarQube集成阿里p3c规则
  11. vue实现登录验证码
  12. camera具体曝光时间readout时间出图时间
  13. IC卡管理系统(Java基础)
  14. 西工大-计算机学院-2021复试-面试题目
  15. 2022年顶会、顶刊SNN相关论文----------持续更新中
  16. 水表读数图解_水表怎么看,教你轻松看懂水表读数
  17. 需要系数 计算机房,计算电流及需要系数表.xls
  18. Handle Protocol
  19. 东京商城注册页面使用的正则表达式......
  20. 用好WordPress不可不知的函数(转)

热门文章

  1. linux 解压rar压缩包
  2. python判断一个字符串在数组中的位置
  3. mysql 设置 utc_关于时间:MySQL应该将其时区设置为UTC吗?
  4. 程序员常用软件介绍--持续更新
  5. Laravel artisan常用命令集锦
  6. 麒麟子Cocos Creator实用技巧
  7. 【浏览器修改请求头】该地址不支持在浏览器打开,如需访问, 请使用微信扫描下方二维码
  8. 北京奥林匹克公园三维场景网络发布应用
  9. 《按自己的意愿过一生》语录二
  10. 重温归一化(MinMaxScaler)和标准化(StandardScaler)