android Activity生命周期详解(图文)

首先看一下Android api中所提供的Activity生命周期图:



 

第一:一个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方法。

可见生存期:

一个活动的可见生存期是指调用onStartonStop之间的那段时间。在这个时间里,活动对用户是可见的,但是它有可能不具有焦点,或者它可能被部分遮住了。

活动生存期:

活动生存期是指调用onResumeonPause之间的那段时间。一个处于活动状态的活动是前台的,并且正在接收用户的输入事件。注意,尽量让onResumeonPause中的代码执行迅速,并且其中的代码尽可能的少,以保证在前台和后台之间进行切换的时候应用能够保持响应。

 

 

下面为生命周期的执行过程函数的调用:


1.启动过程:onCreate()->onStart()->onResume();如下图:



 

 

2.销毁过程:onPause->onStop()->onDestroy();



 

 

3.不销毁跳转到第二个Activity过程:onPause->onStop();



 

4.再从第二个activiy返回第一个Activity(在第一个Activity没有销毁的情况下)的过程:

onRestart()->onStart()->onResume();



 

5.按下home键执行的过程:onPause()->onStop();



 

6.按下返回键执行的过程:onPause()->onStop()->onDestroy();

 



 

 

OK就这么简单,还不懂的大家写一个项目自己测试慢慢摸索,基本上懂了这几个生命周期的过程对,Activiy的灵活使用开发应该没什么问题了。

 

下面再附上测试图:

第一个Activity如下:



 

第二个activiy:



 

下面把本实例的代码页附上

猜你喜欢

转载自104zz.iteye.com/blog/1685753