专栏首页AnRFDevAndroid Activity 生命周期
原创

Android Activity 生命周期

Activity 生命周期

前面我们看了Activity的综述。本文我们来看它的生命周期。

Android官方文档介绍的很详细。

这里我们打一些log仔细观察一下生命周期的变化。

生命周期图示

生命周期变化

执行一些常见的操作,打log看一下生命周期的变化。

启动然后退出

onCreate
onStart
onResume
onWindowFocusChanged: hasFocus: true

onWindowFocusChanged: hasFocus: false
onPause
onStop
onDestroy

启动后按home键

Act1: onCreate
Act1: onStart
Act1: onResume
Act1: onWindowFocusChanged: hasFocus: true

// 按home键
Act1: onWindowFocusChanged: hasFocus: false
Act1: onPause
Act1: onStop

// 再回来
Act1: onRestart
Act1: onStart
Act1: onResume
Act1: onWindowFocusChanged: hasFocus: true

// 按返回键退出act
Act1: onWindowFocusChanged: hasFocus: false
Act1: onPause
Act1: onStop
Act1: onDestroy

旋转手机

activity在切换横竖屏的时候的生命周期。

[Life]: onCreate
[Life]: onStart
[Life]: onResume
[Life]: onWindowFocusChanged: hasFocus: true

// 横屏
[Life]: onPause
[Life]: onStop
[Life]: onDestroy
[Life]: onCreate
[Life]: onStart
[Life]: onResume
[Life]: onWindowFocusChanged: hasFocus: true

// 竖屏
[Life]: onPause
[Life]: onStop
[Life]: onDestroy
[Life]: onCreate
[Life]: onStart
[Life]: onResume
[Life]: onWindowFocusChanged: hasFocus: true

// 返回
[Life]: onWindowFocusChanged: hasFocus: false
[Life]: onPause
[Life]: onStop
[Life]: onDestroy

整个过程并没有走onRestart方法。更像是重新启动activity。

来回切换的生命周期变化

以2个Activity启动为例。

Act1: onCreate
Act1: onStart
Act1: onResume
Act1: onWindowFocusChanged: hasFocus: true
Act1: onPause
Act1: onWindowFocusChanged: hasFocus: false
Act2: onCreate
Act2: onStart
Act2: onResume
Act2: onWindowFocusChanged: hasFocus: true
Act1: onStop
Act2: onWindowFocusChanged: hasFocus: false
Act2: onPause
Act1: onRestart
Act1: onStart
Act1: onResume
Act1: onWindowFocusChanged: hasFocus: true
Act2: onStop
Act2: onDestroy
Act1: onWindowFocusChanged: hasFocus: false
Act1: onPause
Act1: onStop
Act1: onDestroy

可以看到,启动act2的时候,act1显示失去了屏幕焦点,然后进入onPause;

Act2启动并可见后,act1来到onStop。

弹出AlertDialog

点击按钮弹出一个AlertDialog。观察发现调用了onWindowFocusChanged。

onWindowFocusChanged: hasFocus: false
onWindowFocusChanged: hasFocus: true

这里也可以用DialogFragment来做测试。

调用recreate()方法

[Life]: onCreate
[Life]: onStart
[Life]: onResume
[Life]: onWindowFocusChanged: hasFocus: true
[Life]: click [recreate]
[Life]: onPause
[Life]: onStop
[Life]: onDestroy
[Life]: onCreate
[Life]: onStart
[Life]: onResume

可以看到,调用recreate()方法后并没有走onWindowFocusChanged回调。

onCreate和onStart的区别

activity的状态区别

  • onCreate在系统首次创建 Activity 时触发。Activity 会在创建后进入已创建状态。
  • 当 Activity 进入“已开始”状态时,系统会调用此回调。onStart() 调用使 Activity 对用户可见,因为应用会为 Activity 进入前台并支持交互做准备。

onStart() 方法会非常快速地完成,并且与“已创建”状态一样,Activity 不会一直处于“已开始”状态。一旦此回调结束,Activity 便会进入已恢复状态,系统将调用 onResume() 方法。

onPause和onStop的区别

onPause() 执行非常简单,而且不一定要有足够的时间来执行保存操作。

因此,您不应使用 onPause() 来保存应用或用户数据、进行网络调用,或执行数据库事务。因为在该方法完成之前,此类工作可能无法完成。

已进入已停止状态,因此系统将调用 onStop() 回调。

举例而言,如果新启动的 Activity 覆盖整个屏幕,就可能会发生这种情况。

在 onStop() 方法中,应用应释放或调整应用对用户不可见时的无用资源。例如,应用可以暂停动画效果,或从细粒度位置更新切换到粗粒度位置更新。

使用 onStop() 而非 onPause() 可确保与界面相关的工作继续进行,即使用户在多窗口模式下查看您的 Activity 也能如此。

您还应该使用 onStop() 执行 CPU 相对密集的关闭操作。

测试机型:RedMi

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • android Activity生命周期

    这种情况可以重写A页面的onResume()的方法,因为从A页面到B页面后A页面的状态为Paused B页面`finish后A页面的状态就会变成Running,...

    剑行者
  • 详解 Android Activity 生命周期

      从以下几个方面详细说一下Activity的生命周期:  1.回到主屏幕再打开和退出程序的时候。   2.屏幕旋转的时候。   3.打开其它的Activit...

    lpxxn
  • Android Activity生命周期整理

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447
  • 16.Android-activity生命周期与启动模式

    如果一个活动失去了焦点,但仍然可见(也就是说,一个新的非全尺寸或透明的活动将焦点放在了活动的顶部),那么它将被暂停。暂停的活动是完全活动的(它维护所有状态和成员...

    张诺谦
  • Android Activity的生命周期

    通过上一节“Android系列之四:Android项目的目录结构”我们已经知道了什么是Activity,那么为什么我们创建一个Activity的导出类的时候为什...

    飞雪无情
  • Android  Activity生命周期和堆栈管理的详解

    Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件。 系统提供的组件,不需...

    砸漏
  • 《Android》Lesson08-Activity的生命周期

    用户1733354
  • 【Android基础】Activity生命周期

    前言: 在网站开通以来一直想着写一些Android基础知识分享给大家,但是有时候又觉得怕写不好误导了大家学习Android,思前想后觉得还是去Android官...

    程序员互动联盟
  • android入门 — Activity生命周期

    Mister24
  • Android Activity的生命周期和启动模式详解

    当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法。

    哲洛不闹
  • Android Activity 活动的生命周期

    Activity 类中定义了7 个回调方法,覆盖了活动生命周期的每一个环节。以下7 个方法中除了onRestart()方法,其他都是两两相对的。

    小锋学长
  • Android 中 activity 的生命周期和数据储存

    Activity 作为 Android 的四大组件之一,其与用户接触的机会最多,所以灵活运用 activity 类能够让我们的程序用户体验感更好。首先我们来看一...

    指点
  • 从0系统学Android-2.4 Activity 的生命周期

    Android 中的 Activity 是可以层叠的。我们每次启动一个新的 Activity,就会覆盖在原来的 Activity 上面,然后点击 back 键就...

    开发者
  • 【Android基础】Activity的生命周期函数

    前言: 上一篇文章写了关于Activity生命周期和生命周期状态的介绍,这一篇文章给大家聊聊Activity生命周期函数。 主Activity: 应用程序的入口...

    程序员互动联盟
  • Android 进阶1:Activity 的生命周期

    《Android 开发艺术探索》去年就看完了,但由于当时水平不够,加上自己脑子愚笨,很多知识没有完全消化。还是再来回顾、敲敲、总结一遍吧。 典型情况下的生命周...

    张拭心 shixinzhang
  • Android拾萃- Activity的生命周期和启动模式

    概述 Activity 作为与用户交互的一个窗口,是使用非常频繁的一个基本组件。Android系统是通过Activity栈来管理Activity的,而Activ...

    我就是马云飞
  • Android查缺补漏--Activity生命周期和启动模式

    一、生命周期 onCreate():启动Activity时,首次创建Activity时回调。 onRestart():再次启动Activity时回调。 onSt...

    codingblock
  • Android开发之Activity的生命周期以及加载模式

    本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类...

    lizelu
  • Activity生命周期

    用户1130025

扫码关注云+社区

领取腾讯云代金券