Android开发,Activity生命周期


 Android程序中Acticity的生命周期测试

   

                                          (第一个跳转到第二个Activity时,分为满屏、浮窗两种形式)

 

一、当从FirstActivity(满屏)跳转到SecondActivity(非满屏,浮窗形式)时: 

执行结果是:(根据关键程度来划分步骤

 

   1) FirstActivity的 onCreate()、onStart()、onResume方法执行;

 

   2)当按下按钮时,即由第一个界面FirstActivity切换到SecondActivity时,FirstActivity的onPause()方法执行,接着secondActivity的onCreate()、onStart()、onResume()方法执行;

  3)当按下AVD(Android Virtual Device,即安卓虚拟机)上的“返回”键时,执行

      了SecondActivity的onPause()方法;

  4)再执行FirstActivity的onResume方法;

  5)再执行SecodActivity的onStop()、onDestroy()方法;

 

   6)当再次按下FirstAcivity中能够跳转到SecondActivity()的按钮时;

   7)FirstActivity的onPause方法被执行;

   8)SecondActivity的onCreate()、onStart()、onResume()方法被执行--------说明一个新的SecondActivity被创建,与之前的不同,也验证了步骤……6)中执行了SecondActivity()的onDestroy()方法。(对比步骤5),有FirstActivity的onResume()方法,说明不必再创建一个,而是之前的那个FirstActivity的继续执行)

 

 Activity生命周期流程图


Android开发,Activity生命周期_第1张图片
 

 

注:区分浮窗、非浮窗(满屏)的两种情况,看流程图中的“The Activity is no longer visible”(此Activity是否可见)处于onPause()和onStop()方法之间。当为浮窗形式时,SecondActivity的界面为浮窗,但是FirstActivity的界面依然可见(相当于背景);不过,当为非浮窗形式时,SecondActivity的界面为全屏显示,显然会把FirstActivity的界面掩盖,也就是FirstActivity的界面“no longer visible

    经过试验,以上流程图得到了验证~~

 

二、当从FirstActivity(满屏)跳转到SecondActivity(满屏,非浮窗形式)

 

             1)FirstActivity的 onCreate()、onStart()、onResume方法执行

             2)按下按钮登录到第二个界面,即SecondActivity时,FirstActivity的onPause()方法执行,

             3)接着secondActivity的onCreate()、onStart()、onResume()方法执行

      4)接着是FirstActivity的onStop方法执行

             5)当按下AVD(Android Virtual Device,即安卓虚拟机)上的“返回”键时,执行

      了SecondActivity的onPause()方法

             6)再接着执行,FirstActivity的onRestart()、onStart()、onResume()方法

             7)再执行SecondActivity的onStop()、onDestroy()方法

              8)当第二次按下按钮,从第一个Activity的界面到第二个Activity的界面时,FirstActivity的onPause()方法执行了

              9)紧接着,SecondActivity的onCreate()、onStart()、onResume()方法执行了--------》说明一个新的SecondActivity被创建,与之前的不同,也验证了步骤……6)中执行了SecondActivity()的onDestroy()方法。(对比步骤6),有FirstActivity的onResume()方法,说明不必再创建一个,而是之前的那个FirstActivity的继续执行)

 

 

 附录源代码:

第一种情况时(即所跳转到的第二个界面,SecondActivity的显示为浮窗形式时)

注意此种情况的SecondActivity浮窗形成只要在AndroidManifest.xml里的相应的Activity里面加入android:theme="@android:style/Theme.Dialog",如果没有这一句代码,则SecondActivity会显示为全屏




    

    
        
            
                

                
                
            
        
        
        
    


 

 

1)FirstActivity的界面程序

 

package com.example.test_activitylife;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


//测试Activity的生命周期
public class MainActivity extends Activity {
	private Button bt;

	private static final String Tag="First_Activity";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		Log.v(Tag," 的onCreate()方法执行");
		setContentView(R.layout.activity_main);
		
		bt=(Button)this.findViewById(R.id.button1);

		bt.setOnClickListener(new OnClickListener(){
		@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intentLeap=new Intent();
				intentLeap.setClass(MainActivity.this, SecondMainActivity.class);
				startActivity(intentLeap);
		}	
		});
		
		
	}

	@Override
		protected void onStart(){
			super.onStart();
			Log.v(Tag," 的Onstart()方法执行");
			
		}
		
	@Override
		protected void onResume(){
			super.onResume();
			Log.v(Tag," 的onResume()方法执行");
		}
	@Override	
		protected void onPause(){
			super.onPause();
			Log.v(Tag," 的onPause()方法执行");
		}
	@Override
		protected void onRestart(){
			super.onRestart();
			Log.v(Tag,"F 的onRestart()方法执行");		
		}
	@Override	
		protected void onStop(){
			super.onStop();
			Log.v(Tag," 的 onStop()方法执行");
		}
	@Override	
		protected void onDestroy(){
			super.onDestroy();
			Log.v(Tag," 的 onDestroy()方法执行");
		}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

 界面显示:

 


Android开发,Activity生命周期_第2张图片
  SecondActivity的界面程序

 

package com.example.test_activitylife;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class SecondMainActivity extends Activity {
	private final static String Tag="Second_Activity";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.v(Tag,"Second_Activity的onCreate()方法执行");
		setContentView(R.layout.activity_second_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.second_main, menu);
		return true;
	}
	
	@Override
	protected void onStart(){
		super.onStart();
		Log.v(Tag," 的Onstart()方法执行");
		
	}
	
	@Override
	protected void onResume(){
		super.onResume();
		Log.v(Tag,"的onResume()方法执行");
	}
	@Override
	protected void onPause(){
		super.onPause();
		Log.v(Tag," 的onPause()方法执行");
	}
	@Override
	protected void onRestart(){
		super.onRestart();
		Log.v(Tag," 的onRestart()方法执行");		
	}
	@Override
	protected void onStop(){
		super.onStop();
		Log.v(Tag," 的 onStop()方法执行");
	}
	@Override
	protected void onDestroy(){
		super.onDestroy();
		Log.v(Tag," 的onDestroy()方法执行");
	}

}

 界面显示:

 
Android开发,Activity生命周期_第3张图片
 

 

 

 

 

第二种情况时(即所跳转到的第二个界面,SecondActivity的显示为非浮窗形式时)

FirstActivity的界面程序和第一种情况一样,即可参考上面的,只是相应的AndroidManifest.xml文件里少了  android:theme="@android:style/Theme.Dialog"

     

 FirstActivity界面:


Android开发,Activity生命周期_第4张图片
 

SecondActivity界面:


Android开发,Activity生命周期_第5张图片
 

 

 

你可能感兴趣的:(Android开发)