Activity-运行状态及生命周期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity-运行状态及生命周期相关的知识,希望对你有一定的参考价值。

参考技术A

Activity 是四大组件之一,提供一个屏幕,用户可以用来交互为了完成某项任务。

一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端( Activity 栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。

当 Activity 失去焦点, 被一个新的非全屏的 Activity 或者一个透明的 Activity 被放置在栈顶,此时的状态叫做暂停状态(Paused)。此时它依然与窗口管理器保持连接, Activity 依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。

如果一个 Activity 被另外的 Activity 完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见, Activity 处于Stopped状态。当 Activity 处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦 Activity 退出或关闭时,当前的数据和UI状态就丢失了。当系统内存需要被用在其他地方的时候,Stopped的 Activity 将被强行终止掉。

Activity 被杀掉以后或者被启动以前,处于Killed状态。这是 Activity 已从Activity堆栈中移除,需要重新启动才可以显示和使用。

注:4种状态中,Running状态和Paused状态是可见的,Stopped状态和Killed状态时不可见的。

当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。下图说明了 Activity 在不同状态间转换的时机和条件:

这个方法在每一个Activity类都会有,当我们新建一个 Activity 类时,一定会重写父类的 onCreate() 方法, onCreate() 方法会在Activity第一次被创建时调用 。我们应该在这个方法中完成 Activity 的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。

这个方法在 Activity 由不可见变为可见时调用。

这个方法在 Activity 准备好和用户交互的时候调用。此时的 Activity 一定位于返回栈的栈顶,并且处于运行状态。

这个方法在 Activity 被Dialog或透明的 Activity 覆盖的时候调用。

这个方法在 Activity 完全不可见的时候调用。它和 onPause() 方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么, onPause() 方法会得到执行,而 onStop() 方法并不会执行。

这个方法在 Activity 被销毁之前调用,之后 Activity 的状态将变为销毁状态。

这个方法在 Activity 由停止状态变为运行状态之前调用,也就是 Activity 被重新启动了。

注:android在界面跳转的时候,比如从 Activity B 跳回 Activity A,并不是先执行B的 onDestroy() ,而是执行完B的 onPause() 之后就立即跳回A里的 onResume() 。在执行了A 的 onResume() 之后一两秒甚至更长一点的时间才执行B里的 onDestroy() 。
这样的处理机制应该是为了能够立即响应用户的操作。这样的话一些操作就要放到 onPause() 里去执行。比如视频的暂停销毁或者一些反注册。所以对时间要求和 Activity 是否获取焦点密切相关的操作,不能放在 onCreate() 和 onDestroy() 里,而应该考虑放在 onResume() 和 onPause() 里

Android应用activity四种状态及生命周期

Android应用activity四种状态及生命周期

一、四种状态

running可见,并且可操作一个新的Acivity入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见,并且可以和用户交互的状态。
paused暂停 可见但不能被操作当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态,此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点所以不可以与用户交互。(可见但不能被操作)。
stopped处于停止状态,不可见,也不可以被操作当Activity被另一个acivity覆盖,失去焦点并不可见时处于停止状态。
killed处于销毁状态activity被系统回收或者没有被启动时处于销毁状态。

这是关于四种状态的示例

需要注意的是

  • 当一个Android应用运行时,Android系统以Activity栈的形式管理应用中的全部Activity
  • 当一个Activity实例被创建、销毁或者启动另外一个Activity时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。
  • Android定义了一系列与生命周期相关的方法,在Activity中只是根据需要重写需要的方法。

    四种状态转换关系如下

二、生命周期

生命周期图

生命周期方法

onCreate(Bundle savedStatus)创建Activity时被回调,只会被回调一次该方法在Activity的实例被Android系统创建后第一个被调用。通常在该方法中设置显示屏幕的布局、初始化数据、设置控件被点击的事件响应代码。
onStart()启动Activity时被回调在Activity可见时执行
onRestart()重启Activity时被回调回到最上边的界面,再次可见时执行
onResume()恢复Activity时被回调,onRestart() 方法之后一定会回调该方法Activity获取焦点时执行。
onPause()暂停Activity时被回调Activity失去焦点时执行。
onStop()停止Activity被回调用户不可见进入后台时执行。
onDestroy()销毁Activity时被回调Activity销毁时执行

注意:

  • 生命周期方法 , 成对出现(配对)
  • onCreate() & onDestory()
  • onStart() & onStop()
  • onResume() & onPause()

以上是关于Activity-运行状态及生命周期的主要内容,如果未能解决你的问题,请参考以下文章

android学习笔记28——Activity生命周期

Activity生命周期

Activity生命周期的理解

Android应用activity四种状态及生命周期

activity有几种状态

Activity生命周期理解