Android之Activity生命周期(一)

什么是Activity

在我们接触Android第一个四大组件就是activity,也是开发中遇到最最多的组件,Activity为用户提供了一个可视化交互的窗口,让用户实现各种点击和滑动操作,在开发过程中通过onCreate中setContentView(View)来为activity提供界面交互接口。在Android系统中是通过Activity任务栈来管理activity,Activity的创建到销毁有着自己的生命周期方法,接下来分析下Activity常规典型的生命周期:

Activity的四种状态

  1. Running:Activity处于活动状态,用户可以进行交互,用户点击或滑动屏幕会做出响应,是处于Activity栈顶的状态。
  2. Paused:表明Activity已经失去焦点或者被一个非全屏的Activity所覆盖,或者被一个全透明的Activity所覆盖进入栈顶,这些情况就会进入Paused状态。当在Paused状态时,会失去与用户交互的焦点,就是用户对该界面进行操作是没有反应的,并不是说整个Activity状态被销毁了,但Activity的信息状态和成员变量都还存在的;不过还有一种特殊情况,就是当系统内存紧张的情况,这个Activity会被回收。
  3. Stoped:当一个Activity被另外一个Activiy完全覆盖掉,被覆盖的Activity就会进入Stoped状态,此时用户不可见的;但其的信息状态和成员变量和Paused状态一样的依然是存在的。
  4. Killed:当Activity被系统回收,就是Killed状态,Activity所持有的信息和成员变量都是销毁不存在。

Paused与Stoped最大的区别就是,Paused是用户可见的状态,而Stoped是不可见状态。

Activity的生命周期

  1. Activity第一次启动:onCreate –> onStart–> onResume
  2. 当打开新的Activity或者按Home键返回桌面或灭屏:onPause –> onStop
  3. 当用户再次返回原Activity或者从桌面点击APP回到Activity:onRestart –> onStart –> onResume
  4. 当用户按back返回键:onPause –> onStop –> onDetroy

接下通过代码验证以上场景的activity生命周期的调用

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    /**
     * activity正在创建中,生命周期中的第一个方法。
     * 在这个方法中可以做一些初始化工作,比如setContentView加载布局及初始化所需数据
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate()");

    }

    /**
     * activity正在启动中,这时activity是可见的,但还没有处于前台的位置,是无法和用户交互的。
     */
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart()");
    }

    /**
     * activity已经可见了,并且出现在前台了开始活动了,用户可以操作屏幕会响应的。
     * 与onStart方法相比,都是activity可见状态,但onStart是处于后台,而onResume是在前台的。
     */
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume()");
    }


    /**
     *activity正在停止,一般情况下紧接着onStop会被调用
     * 此时可以在此方法总做一些停止动画或数据存储工作,但不能太耗时
     * 因为这会影响到新的activity的启动显示,旧的activity被执行完后,
     * 新activity的onResume方法才会执行
     */
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause()");
    }


    /**
     * activity即将停止,可以做一些资源释放工作,但不能太耗时
     */
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop()");
    }


    /**
     * activity正在重新启动。一般情况下当前activity从不可见状态到可见状态时
     * onRestart会被执行,这个情形下一般是用户行为所导致的,比如按Home键返回桌面
     * 或启动一个新activity,这时当前的activity就是执行onPause和onStop方法
     * 当用户又回到了这个activity时,就是调用onRestart
     */
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart()");
    }

    /**
     * activity即将销毁,是activity生命周期中最后一个方法,
     * 可以在里面做一些资源的回收释放工作。
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy()");
    }

}

一、当第一次创建activity:从创建到运行状态(Running)

03-23 06:00:20.547 1891-1891/com.hzw.tapp I/MainActivity: onCreate()
03-23 06:00:20.598 1891-1891/com.hzw.tapp I/MainActivity: onStart()
03-23 06:00:20.599 1891-1891/com.hzw.tapp I/MainActivity: onResume()

从Log日志中可以看出,依次调用了onCreate –> onStart –> onResume方法,从Activity的创建到后台的启动再到前台焦点的获取。

二、当打开新的Activity或者按Home键返回桌面或灭屏:从可见状态(Running)到不可见状态(Stoped)

03-23 06:08:17.996 1891-1891/com.hzw.tapp I/MainActivity: onPause()
03-23 06:08:20.869 1891-1891/com.hzw.tapp I/MainActivity: onStop()

同样的从Log日志可以看出,在当前Activity打开新Activity或者按Home键返回桌面或灭屏情况下,Activity会依次调用onPause –> onStop;另外还有一种特殊情况,当新Activity为透明的时,此时只会调用onPause。这两种情况分别对应的Activity的状态变化是:Running –> Stoped;Running –>Paused。

三、当用户再次返回原Activity或者从桌面点击APP回到Activity:从Stoped到Running状态

03-23 06:58:58.104 1648-1648/com.hzw.tapp I/MainActivity: onRestart()
03-23 06:58:58.114 1648-1648/com.hzw.tapp I/MainActivity: onStart()
03-23 06:58:58.115 1648-1648/com.hzw.tapp I/MainActivity: onResume()

从Log日志可以看出,此时依次调用了onRestart –> onStart –>onResume

四、当用户按back返回键

03-23 07:03:19.717 1648-1648/com.hzw.tapp I/MainActivity: onPause()
03-23 07:03:21.545 1648-1648/com.hzw.tapp I/MainActivity: onStop()
03-23 07:03:21.546 1648-1648/com.hzw.tapp I/MainActivity: onDestroy()

从Log日志可以看出,当按back返回键时,Activity会进入销毁状态,此时会依次调用onPause –>
onStop –> onDestroy。

小结

当创建一个新Activity时,依次会调用onCreate、onStart、onResume,进入Running状态,而当Activity退入后台不可见状态时(在当前Activity启动一个新Activity或Home键返回桌面),依次会调用onPause、onStop,进入Stoped状态;接着返回原Activity或者从桌面点击回到Activity,依次会调用onRestart、onStart、onResume,此时由Stoped变为Running状态;最后按back返回键退出Activity进行销毁,此时会调用onPause、onStop、onDestroy。到此Activity整个典型的生命周期流程已经完成了,相对比较清晰了。下一篇将围绕Activity异常情况的生命周期分析。

Android之Activity生命周期(二)

猜你喜欢

转载自blog.csdn.net/hzw2017/article/details/79665817