转载来自:http://104zz.iteye.com/blog/1685753
首先看一下Android api中所提供的Activity生命周期图:
![](http://dl.iteye.com/upload/attachment/0074/3715/e273015e-6658-38e7-9222-ab1bdfdef86a.png)
第一:一个Activity正常的生命周期冲启动到销毁过程如下:onCreate()->onStart()->onResume()->onPause->onStop()->onDestroy();
代码如下:
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity implements OnClickListener{
- private String TAG ="Activity1";
- private Button btn1,btn2,btn3;
- //在完成生命周期开始时调用
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //初始化一个活动
- Log.e(TAG, "onCreate()");
- setContentView(R.layout.activity_main);
- btn1 = (Button) this.findViewById(R.id.btn1);
- btn2 = (Button) this.findViewById(R.id.btn2);
- btn3 = (Button) this.findViewById(R.id.btn3);
- btn1.setOnClickListener(this);
- btn2.setOnClickListener(this);
- btn3.setOnClickListener(this);
- }
- //在onCreate方法完成后调用,用于恢复UI状态
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- //从savedInstanceState恢复UI状态
- //这个Bundle也被传递给了onCreate
- }
- //在可见生存期的开始时调用
- @Override
- protected void onStart() {
- Log.e(TAG, "onStart()");
- super.onStart();
- //既然活动可见,就应用任何要求的UI活动
- }
- //在随后的活动进程可见生命周期之前调用
- @Override
- protected void onRestart() {
- Log.e(TAG, "onRestart()");
- super.onRestart();
- //加载活动可见,知道活动在此进程中已经可见
- }
- //在活动状态生存期开始调用
- @Override
- protected void onResume() {
- Log.e(TAG, "onResume()");
- super.onResume();
- //恢复活动需要,但是当它处于不活动状态时被挂起的暂停的UI更新,线程或进程
- }
- //在活动生命周期结束的时候调用,用来保存UI状态的改变
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- //把UI改变状态保存到outState
- //如果进程被终止并被启动,那么这个Bundle将被传递给onCreate
- }
- //在活动状态生存期结束时调用
- @Override
- protected void onPause() {
- Log.e(TAG, "onPause()");
- //当活动不是前台的活动状态的活动时
- //挂起不需要更新的UI更新,线程或者CPU密集的进程
- super.onPause();
- }
- //在可以生存期结束时调用
- @Override
- protected void onStop() {
- Log.e(TAG, "onStop()");
- //当活动不可见时,挂起不需要的UI更新,线程或处理
- //保存所有的编辑或者状态改变,因为在调用这个方法后,进程可能就会被终止
- super.onStop();
- }
- //在完整生存周期结束时调用
- @Override
- protected void onDestroy() {
- Log.e(TAG, "onDestroy()");
- //清理所有资源,包括结束线程,关闭数据库连接等
- super.onDestroy();
- }
- public void onClick(View v) {
- if(v==btn1){
- startActivity(new Intent(this,Activity2.class));
- }else if(v==btn2){
- startActivity(new Intent(this,Activity2.class));
- finish();
- }else if(v==btn3){
- finish();
- }
- }
- }
完整生存期:
活动完整生存期是指对onCreate方法第一次调用和对onDestory方法的最后一次嗲用之间的时间范围。在某种情况下,还有另一种可能,即一个活动的进程被终止,却没有调用onDestory方法。
可见生存期:
一个活动的可见生存期是指调用onStart和onStop之间的那段时间。在这个时间里,活动对用户是可见的,但是它有可能不具有焦点,或者它可能被部分遮住了。
活动生存期:
活动生存期是指调用onResume和onPause之间的那段时间。一个处于活动状态的活动是前台的,并且正在接收用户的输入事件。注意,尽量让onResume和onPause中的代码执行迅速,并且其中的代码尽可能的少,以保证在前台和后台之间进行切换的时候应用能够保持响应。
下面为生命周期的执行过程函数的调用:
1.启动过程:onCreate()->onStart()->onResume();如下图:
![](http://dl.iteye.com/upload/attachment/0074/3717/516ef65a-1864-3429-95d0-2176d82b0847.png)
2.销毁过程:onPause->onStop()->onDestroy();
![](http://dl.iteye.com/upload/attachment/0074/3719/536a4f8a-f6b0-3cc8-b4af-fcf3ddcdde3a.png)
3.不销毁跳转到第二个Activity过程:onPause->onStop();
![](http://dl.iteye.com/upload/attachment/0074/3721/5d30b596-af96-358b-9585-750180ae50e0.png)
4.再从第二个activiy返回第一个Activity(在第一个Activity没有销毁的情况下)的过程:
onRestart()->onStart()->onResume();
![](http://dl.iteye.com/upload/attachment/0074/3723/df61a548-e0ab-3f4a-8db2-fdcceed59b0e.png)
5.按下home键执行的过程:onPause()->onStop();
![](http://dl.iteye.com/upload/attachment/0074/3725/8e9ec04e-6b5a-3845-9f2f-b1eed01b02b5.png)
6.按下返回键执行的过程:onPause()->onStop()->onDestroy();
![](http://dl.iteye.com/upload/attachment/0074/3727/02825784-73ad-39f3-8985-c143e5d3f8a2.png)
OK就这么简单,还不懂的大家写一个项目自己测试慢慢摸索,基本上懂了这几个生命周期的过程对,Activiy的灵活使用开发应该没什么问题了。
下面再附上测试图:
第一个Activity如下:
![](http://dl.iteye.com/upload/attachment/0074/3729/19d5fa0b-2c48-352f-8bf9-5fb05098bc9f.bmp)
第二个activiy:
![](http://dl.iteye.com/upload/attachment/0074/3731/788cdefb-d490-36d4-9a45-fe14cdabb4ec.bmp)