Activity系列——生命周期
2020-02-10 本文已影响0人
似焰如火
本文内容引用于https://blog.csdn.net/javazejian/article/details/51932554
1. Activity有哪些状态
总的来说,有4种状态,如下
- Running:Activity位于前台,处于活动状态,并处于Activity栈的栈顶,用户可见,可以获取焦点与用户进行交互。
- Paused: 此状态当Activity也位于前台,该Activity用户依然可见,但失去焦点,不可与用户交互。例如,当一个新的非全屏的Activity,或一个透明的Activity放置在Activity栈的栈顶时,该Activity就转化为Paused状态了。此时Activity的状态信息及其成员变量一般不会被销毁,但在系统内存紧张的情况下,有可能被系统回收掉。
- Stopped: 此状态下Activity完全不可见,失去焦点,不可交互。例如,当Activity被另一个Activity完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时Activity的状态信息及其成员变量与Paused状态下类似,一般不会被销毁,但在系统内存紧张的情况下,有可能被系统回收掉。
-
Destroyed: Activity结束,被系统回收掉。
image
Activity会在以上四种形态中相互切换,切换时所经历的流程就是Activity的生命周期了。
2. Activity有哪些生命周期
说Activity的生命不给Google官网的流程图就是耍流氓,所以先上图。
生命周期
这图是Activity典型生命周期,也就是Activity经历创建,运行,停止,销毁等正常的生命周期过程,下面详细说一下每个生命周期的作用、特点等。
- onCreate : 该方法是在Activity被创建时回调,它是生命周期第一个调用的方法,我们在创建Activity时一般都需要重写该方法,然后在该方法中做一些初始化的操作,如通过setContentView设置界面布局的资源,初始化所需要的组件信息等。
- onStart : 启动Activity时回调,此时Activity已设置为可见状态,但还未转至前台显示,因此用户此时是无法看见的。
- onResume : 当此方法回调时,Activity转至前台,用户可见,可与用户交互。此时,Activity进入Running状态。从流程图,我们也可以看出当Activity停止后(onPause方法和onStop方法被调用),重新回到前台时也会调用onResume方法,因此我们也可以在onResume方法中初始化一些资源,比如重新初始化在onPause或者onStop方法中释放的资源。
- onPause : 暂停Activity时回调此方法,后Activity将进入Paused状态。但通过流程图我们还可以看到一种情况是onPause方法执行后直接执行了onResume方法,这属于比较极端的现象了,这可能是用户操作使当前Activity退居后台后又迅速地再回到到当前的Activity,此时onResume方法就会被回调。当然,在onPause方法中我们可以做一些数据存储或者动画停止或者资源回收的操作,但是不能太耗时,因为这可能会影响到新的Activity的显示——onPause方法执行完成后,新Activity的onResume方法才会被执行。
- onStop : 停止Activity时回调次方法,一般在onPause方法执行完成后直接执行,后Activity将进入Stopped状态,此时Activity不可见,仅在后台运行。同样地,在onStop方法可以做一些资源释放的操作(不能太耗时)。
- onRestart :Activity重新启动时被回调,Activity将由不可见变为可见。例如用户打开了一个新的Activity时,旧的Activity就会被暂停(onPause、onStop被执行了),若又想回到旧的Activity页面时,onRestart方法就会被回调。
- onDestroy :Activity销毁时调用该方法,也是生命周期最后一个执行的方法,只会执行一次,一般我们可以在此方法中做一些回收工作和最终的资源释放。