Activity是Android最基本的组件之一,就像是一个管理员一样。初学者听到Activity的生命周期,可能会觉得这是一个比较概念性的东西,甚至有人会觉得为什么会有生命周期这种机制,但是随着深入Android编程,才会了解到它的重要性,下面我来总结一下Activity的生命周期吧。
1. Activity的三种状态:运行,暂停和停止
1.1 运行状态:
当Activity在屏幕的最前端(位于当前堆栈的顶部),它是可见的,有焦点的。可以进行处理用户的操作(点击,双击,长按)等,这就叫做激活或者运行状态,其中,当Activity处于运行状态的时候,Android会尽量保持它的运行,即使出现内存不足,也会杀死堆栈底部的Activity,来确保运行的Activity的正常运行。
1.2 暂停状态:
在某些情况下,Activity对用户来说是可见的,但是却不再拥有焦点,也就是用户对它的实际操作是没有用的,这时就叫做暂停状态,例如当最前端的Activity是透明或这没有全屏,下层的Activity仍然是可见的,这就是暂停的Activity,暂停的Activity是激活的,但是在系统的其它地方用到内存的时候可能会把暂停的Activity杀死
1.3停止状态:
当Activity完全不可见时,它就处于停止状态,当时仍然保留着当前状态的成员和信息,只是对于用户来说是不可见的,当系统内存不足时也可能会把停止状态的Activity杀死
2. 1 生命周期事件:
Activity状态的变化是认为的操作,而这些状态的改变也会触及到其它一些事件,这就是生命周期事件,一共有7个,分别是void onCreate(),void onStart(),void onResume(),void onPause, void onStop(),void onRestart(),void onDestory();
2.2 Activity生命周期如下图所示:
2.3 举例来解释上图。
2.3.1 编写ActivityLifeCycleActivity.java。重写7个响应被触发的方法,以日志的形式输出响应的事件信息,代码如下:
package cn.csdn.android.life;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class Activity_lifeActivity extends Activity {
private static final String TAG="lifeCycle";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG, "onCreate");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "onStart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "onResume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "onPause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "onStop");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "onDestroy");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "onResult");
}
}
1)然后运行程序,然后在LogCat控制台上看到结果如下图所示:
此时执行的方法是:onCreate ----->onStart------>onResume;
2) 然后在虚拟机上点击返回,得到的结果如下图所示:
此时执行的方法是:onPause----->onStop----->onDestory
3) 当方法执行到这里的时候,这个Activity就已经被销毁了。重新启动此应用,调用的方法仍然是第一次启动时用到的方法:onCreate ----->onStart------>onResume,此时点击Home键会输出如下方法:onPause ---->onStop,如下图:
这时没有了onDestory()方法,即销毁方法,只是把这个Activity停止了
4) 长按 Home重新回到ActivityLiseCycle,运行的方法有:onResule ------>onStart---------->onResume
5)下面进行两个Activity之间的交换,从此体现出Activity之间的生命周期之间的切换,
在第一个Activity写一个按钮,通过按钮转到第二个Activity,运行的方法有:onPause---->onStop ,状态由暂停到停止,显示结果如下图:
点击第二个Activity的按钮,返回到第一个Activity时,运行到的方法:onStart-->onResume,应用开始运行
6)创建一个对话框样式,运行,可以看到下面的Activity,但是没有焦点,不能应用,只能应用对话框,运行切换到对话框时用到的方法只用onPause,而从对话框返回Activity时运行的方法 是onResume
7)创建一个对话框,并且通过对话框进行返回,这个时候并不能触发任何状态变化,也不会调用生命周期中的任何函数