Android学习10-----Android组件通信 (2) Activity生命周期

 

Activity 是整个 Android 平台的基本组成,生命周期主要包括三个阶段:

运行态( Running State ):

此时的 Activity 程序显示在屏幕前台,并且具有焦点,可以和用户的操作动作进行交互,例如,向用户提供信息、捕获用户单击按钮的事件并作处理;

暂停态( Paused State ):

此时 Activity 程序失去了焦点,并被其他处于运行态的 Activity 取代在屏幕前台显示,如果切换后的 Activity 程序不能铺满整个屏幕窗口或者是本身具备透明效果,则该暂停态的 Activity 程序对用户仍然可见,但是不可以与其进行交互;

停止态( Stopped State ):

停止态的 Activity 不仅没有焦点,而且是完全不可见,虽然其也保留状态和成员的信息,停止态的 Activity 会在系统需要的时候被结束;

Activity 程序的生命周期控制方法:

No.

方法

可关闭?

描述

1

onCreate

不可以

Activity 程序启动之后会首先调用此方法

2

onRestart

不可以

Activity 程序停止后再次显示给用户时,调用此方法

3

onStart

不可以

当为用户第一次显示界面时调用此方法

4

onResume

不可以

当获得用户焦点的时候调用此方法

5

onPause

可以

当启动其他 Activity 程序时调用此方法,用户进行数据的提交、动画处理等操作

6

onStop

可以

当一个 Activity 程序完全不可见时调用此方法,此时并不会销毁 Activity 程序

7

onDestory

可以

程序被销毁时调用,调用 finish() 方法或系统资源不够使用时将调用此方法

下面我们来通过一个程序来观察一下 Activity 的生命周期

ActivityLifeCycle01Activity.java

package com.iflytek.demo;

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

public class ActivityLifeCycle01Activity extends Activity {
	private Button mybut = null;

	/** Called when the activity is first created. */
	public void onCreate(Bundle savedInstanceState) {
		System.out.println("*** {A} FirstActivity --> onCreate()");
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.first_main);
		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件
		this.mybut.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(ActivityLifeCycle01Activity.this,
						SecondActivity.class);
				ActivityLifeCycle01Activity.this.startActivity(intent); // 执行跳转
			}
		}); // 单击事件
	}

	@Override
	protected void onDestroy() {
		System.out.println("*** {A} FirstActivity --> onDestroy()");
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		System.out.println("*** {A} FirstActivity --> onPause()");
		super.onPause();
	}

	@Override
	protected void onRestart() {
		System.out.println("*** {A} FirstActivity --> onRestart()");
		super.onRestart();
	}

	@Override
	protected void onResume() {
		System.out.println("*** {A} FirstActivity --> onResume()");
		super.onResume();
	}

	@Override
	protected void onStart() {
		System.out.println("*** {A} FirstActivity --> onStart()");
		super.onStart();
	}

	@Override
	protected void onStop() {
		System.out.println("*** {A} FirstActivity --> onStop()");
		super.onStop();
	}

}

SecondActivity.java

package com.iflytek.demo;

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

public class SecondActivity extends Activity {
	private Button mybut = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		System.out.println("*** [B] SecondActivity --> onCreate()");
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.second_main);
		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件
		this.mybut.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(SecondActivity.this,
						ActivityLifeCycle01Activity.class);
				SecondActivity.this.startActivity(intent);
				SecondActivity.this.finish();
			}
		}); // 单击事件
	}

	@Override
	protected void onDestroy() {
		System.out.println("*** [B] SecondActivity --> onDestroy()");
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		System.out.println("*** [B] SecondActivity --> onPause()");
		super.onPause();
	}

	@Override
	protected void onRestart() {
		System.out.println("*** [B] SecondActivity --> onRestart()");
		super.onRestart();
	}

	@Override
	protected void onResume() {
		System.out.println("*** [B] SecondActivity --> onResume()");
		super.onResume();
	}

	@Override
	protected void onStart() {
		System.out.println("*** [B] SecondActivity --> onStart()");
		super.onStart();
	}

	@Override
	protected void onStop() {
		System.out.println("*** [B] SecondActivity --> onStop()");
		super.onStop();
	}

}

程序一旦运行之后,后台输出:

*** {A} FirstActivity --> onCreate()
*** {A} FirstActivity --> onStart()
*** {A} FirstActivity --> onResume()

让第一个Activity跳转到第二个Activity(完全遮盖):

*** {A} FirstActivity --> onPause()
*** [B] SecondActivity --> onCreate()
*** [B] SecondActivity --> onStart()
*** [B] SecondActivity --> onResume()
*** {A} FirstActivity --> onStop()

1、通过按钮事件,返回第一个Activity:

*** [B] SecondActivity --> onPause()
*** {A} FirstActivity --> onCreate()
*** {A} FirstActivity --> onStart()
*** {A} FirstActivity --> onResume()
*** [B] SecondActivity --> onStop()
*** [B] SecondActivity --> onDestroy()

2、通过后退按钮,返回第一个Activity:

*** [B] SecondActivity --> onPause()
*** {A} FirstActivity --> onRestart()
*** {A} FirstActivity --> onStart()
*** {A} FirstActivity --> onResume()
*** [B] SecondActivity --> onStop()
*** [B] SecondActivity --> onDestroy()

上面的 1 2 步骤,其执行结果是一样的,所以我们可以总结出:

当使用返回按钮时,对于 2 会自动进行销毁,相当于调用了 finish() 方法执行。

因为现在第二个 Activity 程序属于完全遮盖了一个 Activity 程序,那么如果不完全遮盖,我们将第二个 Activity 改为对话框的形式:

<activity
            android:label="@string/app_name"
            android:name=".SecondActivity"
            android:theme="@android:style/Theme.Dialog" />

 

此时第二个 Activity 无法完全遮盖第一个 Activity

程序一旦运行之后,后台输出:

*** {A} FirstActivity --> onCreate()
*** {A} FirstActivity --> onStart()
*** {A} FirstActivity --> onResume()

让第一个Activity跳转到第二个Activity(不会完全遮盖):

*** {A} FirstActivity --> onPause()
*** [B] SecondActivity --> onCreate()
*** [B] SecondActivity --> onStart()
*** [B] SecondActivity --> onResume()

1、通过按钮事件,返回第一个Activity:

*** [B] SecondActivity --> onPause()
*** {A} FirstActivity --> onStop()
*** {A} FirstActivity --> onCreate()
*** {A} FirstActivity --> onStart()
*** {A} FirstActivity --> onResume()
*** [B] SecondActivity --> onStop()
*** [B] SecondActivity --> onDestroy()

2、现在第一个Activity程序并不会停止执行,通过后退按钮,返回第一个Activity:

*** [B] SecondActivity --> onPause()
*** {A} FirstActivity --> onResume()
*** [B] SecondActivity --> onStop()
*** [B] SecondActivity --> onDestroy()

多个 Activity 程序的入栈操作,最早先打开的 Activity ,则放在栈底,出栈,则以“后进先出”原则;

一旦使用 finish() 方法,就表示一个 Activity 程序结束了,就不会入栈了。

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android,生命周期,Activity)