Activity的生命周期

ActivityAndroid最基本的组件之一,就像是一个管理员一样。初学者听到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个,分别是voidonCreate(),voidonStart(),voidonResume(),voidonPause,voidonStop(),voidonRestart(),voidonDestory();

2.2Activity生命周期如下图所示:

Activity的生命周期

2.3举例来解释上图。

2.3.1编写ActivityLifeCycleActivity.java。重写7个响应被触发的方法,以日志的形式输出响应的事件信息,代码如下:

packagecn.csdn.android.life;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.app.AlertDialog.Builder;

importandroid.content.DialogInterface;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.Button;

publicclassActivity_lifeActivityextendsActivity{

privatestaticfinalStringTAG="lifeCycle";

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Log.i(TAG,"onCreate");

@Override

protectedvoidonStart(){

//TODOAuto-generatedmethodstub

super.onStart();

Log.i(TAG,"onStart");

}

@Override

protectedvoidonResume(){

//TODOAuto-generatedmethodstub

super.onResume();

Log.i(TAG,"onResume");

}

@Override

protectedvoidonPause(){

//TODOAuto-generatedmethodstub

super.onPause();

Log.i(TAG,"onPause");

}

@Override

protectedvoidonStop(){

//TODOAuto-generatedmethodstub

super.onStop();

Log.i(TAG,"onStop");

}

@Override

protectedvoidonDestroy(){

//TODOAuto-generatedmethodstub

super.onDestroy();

Log.i(TAG,"onDestroy");

}

@Override

protectedvoidonRestart(){

//TODOAuto-generatedmethodstub

super.onRestart();

Log.i(TAG,"onResult");

}

}

1)然后运行程序,然后在LogCat控制台上看到结果如下图所示:

Activity的生命周期

此时执行的方法是:onCreate----->onStart------>onResume

2)然后在虚拟机上点击返回,得到的结果如下图所示:

Activity的生命周期

此时执行的方法是:onPause----->onStop----->onDestory

3)当方法执行到这里的时候,这个Activity就已经被销毁了。重新启动此应用,调用的方法仍然是第一次启动时用到的方法:onCreate----->onStart------>onResume,此时点击Home键会输出如下方法:onPause---->onStop,如下图:

Activity的生命周期

这时没有了onDestory()方法,即销毁方法,只是把这个Activity停止了

4)长按Home重新回到ActivityLiseCycle,运行的方法有:onResule------>onStart---------->onResume

Activity的生命周期

5)下面进行两个Activity之间的交换,从此体现出Activity之间的生命周期之间的切换,

在第一个Activity写一个按钮,通过按钮转到第二个Activity,运行的方法有:onPause---->onStop,状态由暂停到停止,显示结果如下图:

Activity的生命周期

点击第二个Activity的按钮,返回到第一个Activity时,运行到的方法:onStart-->onResume,应用开始运行Activity的生命周期

6)创建一个对话框样式,运行,可以看到下面的Activity,但是没有焦点,不能应用,只能应用对话框,运行切换到对话框时用到的方法只用onPause,而从对话框返回Activity时运行的方法onResume

7)创建一个对话框,并且通过对话框进行返回,这个时候并不能触发任何状态变化,也不会调用生命周期中的任何函数