一、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。
如有错误之处,欢迎指出!