Activity的生命周期
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个,分别是voidonCreate(),voidonStart(),voidonResume(),voidonPause,voidonStop(),voidonRestart(),voidonDestory();
2.2Activity生命周期如下图所示:
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控制台上看到结果如下图所示:
此时执行的方法是: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)创建一个对话框,并且通过对话框进行返回,这个时候并不能触发任何状态变化,也不会调用生命周期中的任何函数