移动APP产品体验Android开发Android知识

谈谈Activity正常/异常的生命周期

2016-09-02  本文已影响423人  daking

正常的生命周期分析

Activity各回调方法

  1. onCreate

    • 何时:Activity正在被创建。
    • 作用:进行初始化工作,如setContentView(界面资源)、初始化Activity所需数据。
    • 注意:此方法的传参Bundle为该Activity上次被异常情况销毁时保存的状态信息。
  2. onRestart

    • 何时:Activity正在重新启动。当前Activity从不可见重新变为可见。
  3. onStart

    • 何时:Activity正在被启动。此时Activity已可见,但还不在前台,还无法和用户交互。
  4. onResume

    • 何时:Activity已在前台
  5. onPause

    • 何时:Activity正在停止。当前Activity已不在前台
    • 作用:你需要保存更改到持久数据、停止一些动画、停止一些耗时CPU操作等。
    • 注意:
      1. 此方法不可做耗时操作。onPause()必须先执行完,新Activity的onResume()才会执行。
      2. 正常情况下,onStop()会紧接着被调用,但若此时快速地再回到当前Activity,那么onResume()会被调用。(极端情况,难以重现)
  6. onStop

    • 何时:Activity即将停止。当前Activity已不可见
    • 作用:在此方法中,可做一些稍微重量级的回收工作,如:取消网络连接、注销广播接收器等。
  7. onDestroy

    • 何时:Activity即将被销毁。
    • 作用:做回收工作和最终的资源释放。

生命周期的切换过程

Activity生命周期
  1. 第一次启动,回调如下:onCreate -> onStart -> onResume
  2. 当用户打开新的Activity时,回调如下:A onPause -> B onCreate -> B onStart -> B onResume -> A onStop。注意,若新的Activity采用了透明主题,那么当前Activity不会回调onStop
  3. 当用户再次回到原Activity时,回调如下:onRestart -> onStart -> onResume
  4. 当前Activity在前台,用户按back键时,回调如下:onPause -> onStop -> onDestroy
  5. 当前Activity在前台,用户按Home键时,回调如下:onPause -> onStop
  6. 当前Activity在前台,用户锁屏时,回调如下:onPause -> onStop

生命周期的各阶段

  1. 完整生命周期

    • Activity在onCreate()onDestroy()之间所经历的。
    • onCreate()中完成各初始化操作;在onDestroy()中释放资源。
  2. 可见生命周期

    • Activity在onStart()onStop()之间所经历的。
    • 活动对于用户是可见的,但仍无法与用户进行交互。
  3. 前台生命周期

    • Activity在onResume()onPause()之间所经历的。
    • 活动可见,且可交互。

异常的生命周期分析

onSaveInstanceStateonRestoreInstanceState

  1. Activity的onSaveInstanceStateonRestoreInstanceState

    1. 出现异常情况;
    2. Activity被销毁,回调onPause -> onStop -> onDestroy
    3. 因为Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态。此方法在onStop之前调用。它与onPause没有既定的时序关系。
    4. Activity被重新创建,回调onCreate -> onStart -> onResume
    5. 系统会将上次异常终止时保存的状态传递onRestoreInstanceStateonCreateonRestoreInstanceStateonStart之后被调用
  2. View的onSaveInstanceStateonRestoreInstanceState

    1. 出现异常情况;
    2. Activity被销毁,系统会默认保存当前Activity的视图结构:
      1. Activity调动onSaveInstanceState去保存数据;
      2. 然后Activity会委托Window去保存数据;
      3. Window再委托它的顶级ViewGroup去保存数据;
      4. 其顶级ViewGroup再一一调用它的子视图View的onSaveInstanceState来保存数据。
    3. Activity被重新创建,系统会恢复上次异常终止时保存的视图结构,其onRestoreInstanceState流程与上面类似,也是上层委托下层。

内存不足导致的生命周期

系统配置改变导致的生命周期

系统配置项 含义
mcc SIM卡唯一标识IMSI中的国家代码发生改变,三位数字。<Br>中国为460。
mnc SIM卡唯一标识IMSI中的运营商代码发生改变,两位数字。<Br>中国移动TD系统为00,联通为01,电信为03。
locale 设备的本地位置发生改变。<Br>如切换了系统语言。
touchscreen 触摸屏发生改变。
keyboard 键盘类型发生改变。<Br>比如用户使用了外接键盘。
keyboardHidden 键盘的可访问性发生改变。<Br>比如用户调出了键盘。
navigation 系统导航方式发生改变。<Br>如采用了轨迹球导航。
screenLayout 屏幕布局发生改变。<Br>如用户激活了另一个显示设备。
fontScale 系统字体缩放比例发生改变。
uiMode 用户界面模式发生改变。<Br>如开启了夜间模式(API8添加)。
orientation 屏幕方向发生改变。<Br>如旋转手机屏幕。
screenSize 屏幕的尺寸信息发生改变。<Br>若minSdkVersiontargetSdkVersion都低于13时,此项不生效。
smallestScreenSize 设备的实际物理屏幕尺寸发生改变,这个项和屏幕的方向没有关系。<Br>比如用户切换到外部的显示设备上。<Br>若minSdkVersiontargetSdkVersion都低于13时,此项不生效。
layoutDirection 布局方向发生改变。(API17添加)

我的博客

上一篇 下一篇

猜你喜欢

热点阅读