Activity的生命周期:
一共有三种状态分别为运行状态、暂停状态、以及停止状态。
运行状态:当Activity在屏幕最前端(位于当前堆栈的顶部),他是可见的由焦点的,可以用来处理用户操作(点击,双击,长按等),那摩就叫做激活或运行状态。值得注意的是Activity处于运行状态的时候,Android会尽可能地保持它的运行,即使出现内存不足等情况下,Android也会先杀死堆栈底部的Activity,来确保运行状态的Activity正常运行。
暂停状态:在某种情况下。Activity对用户来说,仍是可见的,但不用有焦点,
即用户对他的操作时没有实际意义的。在这个时候,他是处于暂停状态,例如:
当最前端的Activity是个透明或者没有全屏,那摩下层仍然可见的 Activity就是暂停状态,暂停状的Activity态仍然是可激活的(他保留着所有的状态和成员信息并保持与aCtivity管理器的连接),担当内存不足时可能会被杀死。(注意:不是所有的Activity失去焦点就会进入暂停状态)
停止状态:当Activity完全不可见时,他就处于停止状态他仍然保持者当前状态和成员信息,然而这些对用户来说,都是不可见的;同暂停状态一样,当系统气态地方需要内存时,台也有被杀死的可能。
生命周期事件:
Activity状态的变化是人为操作的,而这一状态的改变,也会触发一些状态。我们叫他生命周期状态事件。一共有七个。
Viid onCreate(Bundle saveInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
生命周期图:
当打开一个Activity,如果该Activity实例不存在与Activity管理器中,就会触发onCreate事件。注意:Activity的实例不是我们自己创建的,是Android系统自己创建的。
接下来是onStart事件,然后是onResume事件,此时Activity就处于运行状态了。
编写Activity.java
首先重写7个相应被触发的方法,以日志的形式输出相应的事件信息。
package cn.class3g.activity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityLifeCycleActivity 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() {
super.onStart();
Log.i(TAG, "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart");
}
}
1:运行Activity从创建到进入运行状态所触发的事件;
onCreate()--->onStart()--->onResume()
2:点击返回键
onPause()-->onStop()-->onDestroy()
-----------------------------------------------------------
1运行
2:点击Home(小房子;压栈)
onPasuse-->onStop()
3长按Home键重新回到 ActivityLifeCycleActivity
onRestart()-->onStart()-->onResume()
-------------------------------------------------------------------
1运行
2切换值SecondActivity之上
onPasuse-->onStop()
3切换回ActivityLifeCyle
onRestart()-->onStart()-->onResume()
创建一个对话框样式的activity:DialogActivity
1运行
2切换至DialogActivity
onPause()
3按返回键返回至ActivityLifeCyle
onResume()
创建AlertDialog对话框
显示对话框并返回,发现此事并不能触发 ActivityLifeCycleActivity实例的状态变化
也就不会调用其生命周期中的任何的函数。
--------------------------------------------------
添加
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState()");
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState()");
}
1运行程序
2按Home
onSaveInstanceState--->onPause()-->onStop()
3在桌面,长按Home重新回到ActivityLifeCycleActivity
onRestsrt-->onstart-->onResume
注意:此时并没有触发onRestoreInstanceState()(因为它并没有真正销毁)