`

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(一)Activity之间通信及其生命周期变化

    Activity之间通信及其生命周期变化,及回传参数等基础知识点

    Android高级编程--源代码

    3.4 Android应用程序生命周期 48 3.5 理解应用程序的优先级和进程状态 49 3.6 分离资源 50 3.6.1 创建资源 50 3.6.2 使用资源 57 3.6.3 To-Do List资源示例 60 3.6.4 为不同的语言和硬件创建资源 61 3.6.5 ...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android编程中的四大基本组件与生命周期详解

    本文实例讲述了Android编程中的四大基本组件与生命周期。分享给大家供大家参考,具体如下: Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解...

    Android应用开发揭秘pdf高清版

    《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...

    Android系统源代码情景分析-罗升阳-源码

    第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用实例 10.1.1 ArticlesProvider 10.1.2 Article 10.2 Content Provider组件的启动过程 10.3 Content Provider组件的数据共享原理 10.3.1...

    Android核心技术与实例详解 PDF扫描版

    2 2 1 应用程序的生命周期 2 2 2 Activity简介 2 2 3 Service简介 2 2 4 BroadcastReceiver简介 2 2 5 ContentProvider简介 2 2 6 Intent和IntentFilter简介 2 3 小结 第3章 Android布局管理器 3 1 控件类概述 3 1 1...

    Android开发案例驱动教程 配套代码

    9.1.2 Activity生命周期 180 9.2 Intent 183 9.2.1 显式Intent 184 9.2.2 隐式Intent 186 9.2.3 匹配组件 186 9.3 多Activity之间跳转 188 9.3.1 多个Activity之间数据传递 189 9.3.2 跳转与返回 192 9.3.3 ...

    《Android系统源代码情景分析》

    第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用实例 10.1.1 ArticlesProvider 10.1.2 Article 10.2 Content Provider组件的启动过程 10.3 Content Provider组件的数据共享原理 ...

    大连工业 移动互联网技术及开发Android 三次实验源码实验一 UI设计 实验二 组件间通信 实验三 数据存储

    2. 掌握Activity的生命周期。 3. 掌握组件间的数据传递方法。 4. 掌握数据回传的方法。 实验三 数据存储 一、实验目的: 1.掌握Android数据存储的基本方式。 2. 掌握ListView的使用。 3. 掌握SQLite的使用。 实验...

    Android应用开发详解pdf.pdf

     第5章 Android基本程序单元ActivityAndroid 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容  续表  篇 名章 名内容简介  第二篇 技术篇第6章 Android组件之间的信使...

    android开发揭秘PDF

    3.2 Android的生命周期 3.3 Android程序U设计 3.4 小结 第4章 用户界面开发 4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表(ListView) 4.2.3 提示(T0...

    Android基础课内实验报告.doc

    掌握Activity生命周期。 3. 掌握Activity之间的跳转及数据传递。 实验内容: 内容1:Activity的存活(见参考文档)。 内容2:新建联系人(根据参考文档)。 内容3:装备选择(根据参考文档)。 注:内容2和内容3...

    Android入门到精通源代码.

    3.2.1 Activity的生命周期 3.2.2 Activity类的结构 3.3 Activity的两种界面设计方式 3.3.1 基于XML的界面设计 3.3.2 基于代码的界面设计 3.4 应用实例:在界面中显示图片 第4章 Android人机界面和常用组件 4.1 用户...

    精通ANDROID 3(中文版)1/2

    13.1 Android组件和线程  13.1.1 活动在主线程上运行  13.1.2 广播接收程序在主线程上运行  13.1.3 服务在主线程上运行  13.1.4 ContentProvider在主线程上运行  13.1.5 单一主线程的影响  13.1.6 ...

    Android开发与应用——张荣,原书配套课件

    3.5.2 Activity生命周期 3.6 Intent简介 3.6.1 Intent属性与过滤器 3.6.2 Intent启动系统Activity 3.7 小结 练习 第4章 视图组件 4.1 视图组件的使用模式 4.1.1 视图组件的定义 4.1.2 资源的访问 ...

    Android 4高级编程(第3版)源代码

     ◆ 深入分析了Android应用程序的组件和生命周期  ◆ 探讨了Android的UI原理、设计理念和UI API,使用户界  面在手机、平板电脑和电视上都引人注目  ◆ 介绍了创建基于地图的应用程序和使用基于位置的服务  的...

    Android服务Service详解

    本章内容服务(Service)是Android... Service的生命周期  绑定Activity和Service  在BroadcastReceiver中启动Service  系统服务  时间服务  在线程中更新GUI组件  AIDL服务  在AIDL服务中传递复杂的数据  

Global site tag (gtag.js) - Google Analytics