Android Activity的生命周期

来源:互联网 发布:鲜活的数据 下载 编辑:程序博客网 时间:2024/05/20 23:56

一、Activity简介

Android系统通过Activity栈对Activity进行管理,而Activity通过自身的生命周期方法来管理自己的创建和毁灭。
Activity的四种状态:
1.Active/Running:运行状态,此时Activity位于栈顶,是可见状态,可与用户进行交互。
2.Paused:暂停状态,此时Activity失去焦点,不能与用户交互,但依然对用户可见(比如栈顶的Activity是透明的,或者栈顶的Activity没有铺满整个屏幕)。
3.Stopped:停止状态,当Activity被其他Activity完全遮挡时,被遮挡的Activity进入Stopped状态,此时对用户不可见,也不能与用户进行交互。
4.Killed:销毁状态,当Activity由于人为或者系统原因被销毁时,就处于Killed状态。

二、Activity生命周期

首先看一张官方文档中的Activity的生命周期图(https://developer.android.com/reference/android/app/Activity.html):
这里写图片描述
由上图可以看出,一个简单的完整生命周期的执行顺序为:onCreate->onStart->onResume->onPause->onStop->onDestroy。
下面介绍一下Activity中几个重要生命周期方法调用的时机:
1.onCreate:在Activity被创建时回调,一般在创建Activity时都需要重写该方法,在该方法中进行一些初始化操作,如设置界面布局的资源,初始化组件信息等。
2.onStart:Activity正在启动时回调,此时Activity已经处于可见状态,只是还没有显示到前台,无法与用户进行交互。
3.onResume:该方法回调时表示Activity已在前台可见,并可以与用户交互。
4.onPause:该方法回调时表示Activity正在停止。
5.onStop:该方法一般在onPause方法执行完成后直接执行,表示Activity停止或者被完全覆盖,此时Activity不可见,也不能与用户交互。
6.onRestart:表示Activity正在重新启动,当Activity由不可见状态变为可见状态时回调。
7.onDestroy:Activity正在被销毁时回调,是Activity生命周期中最后执行的一个方法,可以在该方法中做一些回收工作或最终资源的释放。

三、代码部分

1.只有一个Activity时的简单生命周期代码演示:

public class MainActivity extends Activity {    private static final String TAG = "Info"; //定义TAG标签    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Log.v(TAG,"A执行onCreate");    }    @Override    protected void onStart() {        super.onStart();        Log.v(TAG, "A执行onStart");    }    @Override    protected void onResume() {        super.onResume();        Log.v(TAG, "A执行onResume");    }    @Override    protected void onPause() {        super.onPause();        Log.v(TAG, "A执行onPause");    }    @Override    protected void onStop() {        super.onStop();        Log.v(TAG, "A执行onStop");    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.v(TAG, "A执行onDestroy");    }    @Override    protected void onRestart() {        super.onRestart();        Log.v(TAG, "A执行onRestart");    }}

下面根据打印的Log信息来分析一下Activity的生命周期:
(1)Activity启动时:
这里写图片描述
依次执行onCreate->onStart->onRusume方法,进入运行状态,此时可见并可与用户交互。
(2)点击Home键返回:
这里写图片描述
依次执行onPause->onStop方法,此时Activity不可见。
(3)点击App回到页面:
这里写图片描述
依次执行onRestart->onStart->onResume方法,Activity重新进入运行状态。
(4)点击Back键返回:
这里写图片描述
依次执行onPause->onStop->onDestroy方法,销毁Activity。
2.Activity跳转过程中的生命周期代码演示:
在布局中添加一个跳转按钮,在MainActivity的onCreate()中绑定按钮的点击事件,点击按钮跳转到SecondActivity界面。

/*第二个Activity,由MainActivity跳转到SecondActivity*/public class SecondActivity extends Activity {    private static final String TAG = "Info";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.second_activity);        Log.v(TAG,"B执行onCreate");    }    @Override    protected void onStart() {        super.onStart();        Log.v(TAG, "B执行onStart");    }    @Override    protected void onResume() {        super.onResume();        Log.v(TAG, "B执行onResume");    }    @Override    protected void onPause() {        super.onPause();        Log.v(TAG, "B执行onPause");    }    @Override    protected void onStop() {        super.onStop();        Log.v(TAG, "B执行onStop");    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.v(TAG, "B执行onDestroy");    }    @Override    protected void onRestart() {        super.onRestart();        Log.v(TAG, "B执行onRestart");    }}

分析:
(1)MainActivity启动时:
这里写图片描述
MainActivity依次执行onCreate->onStart->onResume方法,进入运行状态。
(2)点击进入SecondActivity:
这里写图片描述
进入新的Activity时,原Activity依次执行onPause->onStop,与点击Home键时回调的方法相同,新的Activity依次执行onCreate->onStart->onResume。
(3)返回到MainActivity:
这里写图片描述
新的Activity依次执行onPause->onStop->onDestroy,而原Activity依次执行onRestart->onStart->onResume,回到MainActivity界面。
(4)点击Back键返回:
这里写图片描述
原Activity依次执行onPause->onStop->onDestroy,销毁Activity。
3.Activity跳转过程中,若跳转到SecondActivity时MainActivity没有被完全遮挡,则跳转后MainActivity不执行onStop。


如有错误之处,欢迎指出!

原创粉丝点击