Android基础知识(五):Activity的生命周期

Android基础知识(五):Activity的生命周期

一、认识Activity
Android系统中是通过Activity栈的方式来管理Activity的,而Activity自身则是通过生命周期的方法管理Activity的创建与销毁。
Android中的Activity是可以层叠的,每启动一个新的Activity,就会覆盖在原Activity之上,销毁最上面的Activity,下面的Activity就会重新显示出来。事实上,Android是使用任务(Task)来管理Activity的,一个Task就是一组存放在栈里的Activity的集合,这个栈也被称作返回栈
返回栈的工作示意图。
在这里插入图片描述
在这里插入图片描述

二、Activity的形态
每个Activity在其生命周期中最多可能会有4种状态。

  1. 运行状态(Active/Running)
    Activity位于返回栈的栈顶时,Activity处于运行状态。
  2. 暂停状态(Paused)
    Activity不再处于栈顶,但仍然可见时,Activity进入Paused状态。换句话说,当Activity失去焦点或被一个新的非全屏的Activity或被一个透明的Activity放置在栈顶时,进入Paused状态。(例如对话框)
  3. 停止状态(Stopped)
    当一个Activity不再处于栈顶位置,并且完全不可见的时候,进入Stopped状态。系统仍然会为这种Activity保存相应的状态和成员变量,但是并不是完全可靠的,当其他地方需要内存时,处于停止状态的Activity可能会被系统回收
  4. 销毁状态(Killed)
    当一个Activity从返回栈中移除后就变成了销毁状态,系统会最倾向于回收处于这种状态的Activity,从而保证手机内存充足。

三、Activity的生命周期
在这里插入图片描述
Activity生命周期流程图:
在这里插入图片描述
Activity类中定义了7个回调方法,覆盖了Activity生命周期的每一个环节:

  1. onCreate()
    该方法在Activity被创建时回调,是生命周期第一个调用的方法,一般在该方法中做一些初始化的操作,如通过setContentView设置界面布局的资源等。
  2. onStart()
    该方法回调时表示Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,因此无法和用户进行交互。该方法在Activity由不可见变为可见时调用
  3. onResume()
    该方法在Activity准备好和用户进行交互时回调,此时Activity一定位于返回栈的栈顶,并且处于运行状态
    该方法的回调表明了Activity已在前台可见,可与用户交互。
  4. onPause()
    该方法在系统准备去启动或者恢复另一个Activity的时候调用。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据。
    一般情况下onStop()方法会紧接着被回调,但是如果当前Activity退居后台后又迅速回到当前Activity,此时onResume()方法会被回调。
    在这里插入图片描述
    在onPause()方法中可以做一些数据存储或动画停止或者资源释放,但是不能太耗时,因为这可能影响到新的Activity的显示——onPause方法执行完成后,新Activity的onResume方法才会被执行
  5. onStop()
    Activity完全不可见的时候调用,表示Activity即将停止或者完全覆盖,仅在后台运行,同样的,在onStop方法中可以做一些资源释放的操作(不能耗时)。
    其和onPause方法的主要区别:如果启动的新活动是一个对话框式的Activity,那么onPause()方法会得到执行,但是onStop()方法不会执行(因为上一个Activity依旧可见)。
  6. onDestroy()
    Activity被销毁之前调用,此时Activity正在被销毁,也是生命周期的最后一个执行方法,一般可以在此方法中做一些回收工作和最终的资源释放。
  7. onRestart()
    在Activity由停止状态变为运行状态之前调用,重新启动Activity,Activity由不可见状态变为可见状态
    在这里插入图片描述

四、Activity异常生命周期
异常生命周期是指Activity被系统回收或者当前设备的Configuration发生变化(一般指横竖屏切换)从而导致Activity被销毁重建
在这里插入图片描述
异常生命周期主要分为两种情况:

  1. 相关的系统配置发生改变导致Activity被杀死并重新创建(一般指横竖屏切换)
    正常的启动Activity时,onCreate、onStart、onResume方法会被依次回调,而切换横竖屏时,onPause、onSaveInstanceState、onStop、onDestroy、onCreate、onStart、onRestoreInstanceState、onResume依次被回调,从调用方法的顺序可以得知,Activity是先被销毁后再重新创建,其异常生命周期流程图如下:
    ps:网上大多数讲到,在不做任何操作的情况下,切换到竖屏会执行两次生命周期,但在基于Android 9.0和Android 8.1.0上时,并没有出现传说中的两次调用,生命周期同上所述
    在这里插入图片描述
  2. 内存不足导致低优先级的Activity被杀死

五、扩展:onSaveInstanceState()与onRestoreInstanceState()
这两个方法是系统自动调用的,由于Activity在异常情况下被销毁,android系统会自动调用onSaveInstanceState()方法来保存当前Activity的状态信息,可以在该方法中存储一些数据以便Activity重建之后可以恢复这些数据。onSaveInstanceState()方法调用的时机必须在onStop()方法之前
当Activity被重新创建之后,系统会自动调用onRestoreInstanceState()方法,并把Activity销毁时通过onSaveInstanceState()方法保存的Bundle对象作为参数同时传递给onRestoreInstanceState()和onCreate()方法,onRestoreInstanceState()方法调用的时机是在onStart()方法之后
在这里插入图片描述
特别注意:onSaveInstanceState()和onRestoreInstanceState()方法只有在Activity异常终止时才会被调用,正常情况下是不会调用这两个方法的。

参考资料:郭霖的《第一行代码——Android第2版》
Android之Activity生命周期浅析(一)
Android之Activity生命周期浅析(二)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值