首页 理论教育 Activity生命周期详解

Activity生命周期详解

时间:2023-06-27 理论教育 版权反馈
【摘要】:延伸知识点活动栈Activity的生命周期指Activity从启动到销毁的过程。每个Activity在其生命周期中最多有4种状态,分别是活动状态、暂停状态、停止状态和非活动状态。不在以上3种状态中的Activity则处于非活动状态。在可见生命周期内,Activity对于用户总是可见的,即使有可能无法和用户进行交互。由于Activity可能在前台和后台之间来回切换,因此在一个Activity的完整生命周期中可能经历多个Activity的可见生命周期。图4-3Activity的生命周期当Activity1启动Activity2时,这两个Acti

Activity生命周期详解

所有的Android组件都具有自己的生命周期,其是从组件建立到组件销毁的整个过程。在生命周期中,组件会在可见、不可见、活动、非活动等状态中不断变化。

掌握Activity的生命周期对任何一个Android开发者来说都是非常重要的,当深入理解Activity的生命周期后,就可以写出更加流畅、资源管理更加合理的应用,同时,应用程序也将拥有更好的用户体验。

延伸知识点

活动栈

Activity的生命周期指Activity从启动到销毁的过程。每个Activity在其生命周期中最多有4种状态,分别是活动状态、暂停状态、停止状态和非活动状态。

(1)活动状态。Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。Android系统最不愿意回收处于活动状态的Activity,因会这会带来非常差的用户体验。

(2)暂停状态。Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能与用户进行交互,比如对话框形式的Activity只会占用屏幕中间的部分区域。处于暂停状态的Activity仍然是完全存活的,Android系统也不愿意回收这种Activity,只有在资源极其紧张的情况下,Android系统才会考虑回收这种Activity。

(3)停止状态。Activity在界面上完全不能被用户看到。Android系统会为这种Activity保存相应的状态,但这并不是完全可靠的,当其他地方需要内存时,处于停止状态的Activity有可能被Android系统回收。

(4)非活动状态。不在以上3种状态中的Activity则处于非活动状态。

Activity类中定义了7个回调方法,这7个方法覆盖了Activity生命周期的每一个环节,Activity调用这7个方法通知Activity从某一状态转变到另一状态,回调方法的具体代码如下:

接下来介绍这7个方法。

1.onCreate()

这是Activity启动后第一个被调用的方法,在之前的示例中也经常出现,它经常用来进行Activity的初始化,比如加载布局、绑定事件等。

2.onStart()

当Activity显示在屏幕上的时候,该方法被调用。另外,该方法在Activity由不可见到可见的时候调用。

3.onResume()

当Activity能够与用户进行交互,接受用户输入时,该方法被调用。此时Activity位于活动栈的栈顶。

4.onPause()

当Activity进入暂停状态时,该方法被调用。通常在这个方法中保存一些关键数据。

5.onStop()

当Activity进入停止状态时,该方法被调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框样式的Activity,那么onPause()方法会被调用,而onStop()方法并不会被调用。(www.xing528.com)

6.onDestroy()

在Activity被销毁之前,该方法被调用,之后Activity的状态就变成销毁状态。

7.onRestart()

在Activity活动从停止状态进入活动状态前,该方法被调用,换句话说就是Activity被重新启动的时候调用该方法。

延伸知识点

除以上7个方法外,还有两个方法需要介绍:onSaveInstanceState()和onRestoreInstance-State()。onSaveInstanceState()方法在Android系统资源不足需要终止Activity前被调用,用以保存Activity的状态信息,供onRestoreInstanceState()方法或onCreate()恢复时使用。而onRestoreInstanceState()方法主要用于恢复onSaveInstanceState()方法保存的Activity状态信息,它在onStart()方法和onResume()之前被调用。

Activity事件回调方法调用顺序如图4-2所示。

图4-2 Activity事件方法回调顺序

以上的7个方法,除了onRestart()方法,其他都是两两相对的,因此又可以把Activity的生命周期分为3种,分别为全生命周期、可见生命周期和前台生命周期。每个生命周期内包含不同的回调方法。

(1)全生命周期

全生命周期始于onCreate()方法,终于onDestroy()方法,是从Activity建立到销毁的整个过程。

通常在onCreate()方法中初始化用户界面、分配变量、绑定数据控件、创建Service和线程等Activity需要使用全局资源和状态,并在onDestroy()方法中释放这些资源。onCreate()方法在一个Activity的全生命周期中仅调用一次,因此当Activity需要创建一些对象时,最好在onCreate()方法中创建。

(2)可见生命周期

可见生命生命周期始于onStart()方法,终于onStop()方法。在可见生命周期内,Activity对于用户总是可见的,即使有可能无法和用户进行交互。onStart()和onStop()方法会被多次调用,而在这两个方法中间,Activity对于用户来说是可见的,尽管它可能被部分遮挡。由于Activity可能在前台和后台之间来回切换,因此在一个Activity的完整生命周期中可能经历多个Activity的可见生命周期。

(3)前台生命周期

前台生命周期始于onResume()方法,终于onPause()方法。在前台生命周期中,Activity在屏幕的最上层,能够与用户进行交互。通过调用onResume()方法和onPause()方法,Activity的状态才能进行变换,因此这两个方法应使用更为简单高效的代码。onPause()方法常用来保存持久数据,如界面上用户的输入信息等。平时看到和接触最多的也是这个状态下的Activity。

为了更好地理解Activity的生命周期,Android官方提供了一张Activity的生命周期图,如图4-3所示。

图4-3 Activity的生命周期

当Activity1启动Activity2时,这两个Activity都经历生命周期转换。Activity1处于暂停或停止状态,然后Activity2启动。当这两个Activity在同一进程中时,生命周期的回调顺序是明确界定的:首先调用当前Activity1的onPause()方法,然后按顺序调用Activity2的onCreate()、onStart()、onResume()方法,之后,如果该Activity2不需要在屏幕上可见时,则调用它的onStop()方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈