Activity的生命周期和启动模式

一个活动在其生命周期中最多会有四种状态:运行状态、暂停状态、停止状态和销毁状态。Activity类中定义了7个回调方法,覆盖了生命周期的每一个环节。

Activity的生命周期和启动模式_第1张图片


1.    onCreate():它会在活动 第一次被创建的时候调用。在这个方法中可以完成活动的初始化操作,比如加载布局、绑定事件等。

2.    onStart():这个方法在活动由不可见变为可见的时候调用。

3.    onResume():这个方法在活动准备好和用户进行交互的时候调用。

4.    onPause():这个方法在系统准备去启动或者恢复另一个活动的时候调用。

5.    onStop():这个方法在活动完全不可见的时候调用。

6.    onDestroy():这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

7.    onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

当一个屏幕旋转的时候的生命周期是怎样的?

首先会被销毁掉,再重新创建。例如:当前程序处于onPause(),旋转过程调用的顺序为:onPause()onStop()onDestroy()onCreate()onStart()onResume()onPause。

Activity中还提供了一个onSaveInstanceState()回调方法,这个方法会在onStop()之前被执行,我们可以在这方法中保存一些数据,解决活动被回收时临时数据得不到保存的问题。

通过重写onSaveInstanceState(Bundle outState)方法可以保存数据:

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        String s = input.getText().toString();
        outState.putString("name",s);
    }
在onCreate()方法中可以取出数据,并且恢复数据:

        if (savedInstanceState!=null){
            String name = savedInstanceState.getString("name", null);
            Log.i(TAG, "onCreate: ++++++++++"+name);
        }


活动的启动模式一共有四种:standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml配置文件中给标签指定android:launchMode属性来选择启动模式。

Android 是使用返回栈来管理活动的。栈是一种后进先出的数据结构,在默认情况 下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们 按下 Back 键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入 栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。

Activity的生命周期和启动模式_第2张图片

standard模式:活动默认的启动模式,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。

Activity的生命周期和启动模式_第3张图片

当我们返回的时候他也是从最上边开始返回的。

singleTop:在启动活动的时候如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。

Activity的生命周期和启动模式_第4张图片

可以看到在当前活动为Activity2的时候启动Activity2,由于栈顶活动为Activity2,所以没有创建新的新的活动,而是直接使用。

singleTask:每次启动活动时系统会首先在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这活动之上的所有活动全部出栈,如果没有则创建一个新的活动。

Activity的生命周期和启动模式_第5张图片

可以看到在启动Activity3的时候,返回栈中有这个活动,于是直接使用,并把出于其上的Activity1和Activity2全部出栈。

singleInstance:被指定为singleInstance的活动在启动时会启用一个新的返回栈来管理这个活动。

Activity的生命周期和启动模式_第6张图片

在返回的时候,由于存在了两个栈,会先返回当前栈,等栈为空,才开始返回另一个栈。


你可能感兴趣的:(android)