一、Activity有三种状态:
voidonCreate(BundlesavedInstanceState)
2、//启动activity时被回调
voidonStart()
3、voidonRestart()
4、//恢复activity时被回调的方法
//只要执行onstart肯定会执行
voidonResume()
5、//暂停activity时被回调的方法
voidonPause()
6、//停止activity时被回调的方法
voidonStop()
7、//销毁activity时被回调的方法
//只会被调用一次
voidonDestroy()
七个生命周期方法中嵌套了三个生命周期循环。
三个生命周期循环如图所示
Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。Activity在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程,而在onDestroy()销毁线程。
Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。onStart()和 onStop()方法可以随着应用程序是否为用户可见而被多次调用。
Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause()方法。当Activity获得结果或者接收到新的Intent时会调用onResume()方法。
三、测试Activity生命周期
目标:1、测试当原Activity未被完全覆盖时 2、测试当测试当原Activity被完全覆盖时
创建三个界面
在AndroidManifest.xml中以第一个Activity启动。并将第三个Activity设置属性android:theme="@android:style/Theme.Dialog,在启动第三个activity时就会以窗口形式打开。
具体MainActivity.java代码实现如下:
package www.gxw.com.activitylife;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = "mainActivity";
//创建activity时被回掉,这个方法只会被调用一次
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "-----------onCreate----");
}
//启动activity时被回调
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "-----------onStart----");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "-----------onRestart----");
}
//恢复activity时被回调的方法
//只要执行onstart肯定会执行
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "-----------onResume----");
}
//暂停activity时被回调的方法
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "-----------onPause----");
}
//停止activity时被回调的方法
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "-----------onStop----");
}
//销毁activity时被回调的方法
//只会被调用一次
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "-----------onDestroy----");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("name", "liming");
Log.i(TAG, "----------onSaveInstanceState--------------");
super.onSaveInstanceState(outState);
}
//打开第三个activity
public void openDialog(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, ThirdActivity.class);
startActivity(intent);
}
//打开第二个activity
public void openActivity(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
测试结果如下:
当Activity启动时:
当Activity结束时:
当Activity被完全覆盖时:
完全覆盖返回时:
不完全覆盖时:
不完全覆盖返回时:
分析结果:
- onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。
- onStart():Activity在屏幕上对用户可见时调用
- onResume():Activity开始和用户交互的时候调用,这时该Activity是在Activity栈的顶部。
- onPause():Activity被暂停时调用,也就是你要对你能看到的这个Activity说byebye的时候调用,这里可以做一些清理和保存工作
- onStop():Activity被停止或者Activity变成不可见时调用
- onDestroy():Activity被从内存中移除,一般发生在执行finish方法时或者Android回收内存的时候