`

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支持包:android-support-v4

    `android-support-v4`库中的BroadcastReceiver和PendingIntent类提供了与原生API相匹配的功能,使得开发者能在低版本的Android上使用这些组件进行事件监听和跨组件通信。 **Preference支持** Preference类是用于...

    ANDROID-Activity--exit.zip_android

    1. Android Activity生命周期,特别是`onCreate()`方法的实现。 2. BroadcastReceiver的使用,包括如何创建、注册和接收广播。 3. 如何通过BroadcastReceiver来监听和响应退出消息,结束Activity。 4. 动态注册...

    Android组件的生命周期

    #### 二、Activity生命周期详解 Activity是Android应用程序中最常见的组件之一,其生命周期包括多个状态: - **Activity的基本状态**: - **Active状态**:运行在屏幕的前台,接受用户操作。 - **Paused状态**:...

    Android四大组件——Activity(一)Activity之间通信及其生命周期变化

    理解Activity的通信方式和生命周期变化是每个Android开发者必须掌握的基础知识。在本篇内容中,我们将深入探讨Activity之间的通信以及它们在不同操作下的生命周期变化,并讨论如何传递回传参数。 首先,我们来看...

    Android程序设计-Activity的生命周期.pptx

    以下是关于Activity生命周期的详细讲解。 1. Activity的状态 Activity有四种主要状态,它们决定了Activity在何时执行特定的操作: - **运行态(Running)**:当Activity位于栈顶且可见时,它处于运行状态,可以与...

    Android-简化Android组件之间的共享字段和通信以及可识别生命周期的自定义范围

    Android组件主要包括Activity、Service、BroadcastReceiver和ContentProvider,它们各自有特定的生命周期和职责。在实际开发中,我们常常需要在这些组件之间共享数据和进行通信,这通常是通过Intent、Bundle、静态...

    android生命周期管理:启动一个Activity

    当我们谈论“android生命周期管理:启动一个Activity”,我们关注的是如何启动Activity以及在生命周期中的关键回调函数。 1. 了解生命周期回调函数 Activity的生命周期由一系列的回调方法组成,包括onCreate(), ...

    Activity和Service生命周期及使用AIDL通信实例备份

    本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...

    android activity 生命周期的深入学习

    本篇文章将详细探讨Activity生命周期的各个阶段及其转换,以及如何在这些阶段中适当地管理资源。 一、Activity生命周期的基本阶段 1. 创建(Creation): - **onCreate()**:Activity的起点,系统在此方法中初始...

    android-sdk-sources-android-21.rar

    - 首先,开发者应熟悉 Android 开发的基本概念,如 Activity 生命周期、Intent 机制等。 - 接着,通过阅读 `frameworks/base` 下的源码,了解系统服务如何与应用程序交互。 - 然后,研究 `system/core`,理解 ...

    android_Activity生命周期

    Activity生命周期是Android开发中至关重要的一环,因为它决定了应用如何响应用户操作和系统事件。理解Activity的生命周期对于编写高效、稳定且用户体验良好的应用至关重要。 Activity的生命周期由多个关键状态组成...

    android-app-master 源代码

    11. **Android Jetpack组件**:Jetpack是一套可提高开发效率的库,包括Room(数据库)、Lifecycle(组件生命周期)、Paging(分页)等,源代码可能会使用到这些组件。 12. **Gradle构建系统**:所有Android项目都...

    Android_Learning-master.zip

    1. **基本组件与生命周期**:Android应用由Activity、Service、BroadcastReceiver、ContentProvider等组件构成。通过源码,我们可以学习这些组件的创建、启动、暂停、恢复、销毁等生命周期管理,理解它们之间的交互...

    Android-Developer-Fundamentals-Version-2.rar

    Android应用由多个组件构成,如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供者(ContentProvider)。每个组件都有其特定的用途,理解和掌握它们之间的交互方式是构建动态应用的...

    android----intent

    可能会深入解释Activity的生命周期与Intent如何影响其状态变化,比如如何通过Intent启动Activity以及在不同Activity间传递数据。 3. Example-3.1 - 这可能是示例代码或案例研究,展示了如何在实际开发中使用Intent...

    浅谈Android生命周期

    在Android应用开发中,理解并掌握Android生命周期是至关重要的。Android生命周期是指一个Activity、Service、BroadcastReceiver或...通过持续学习和实践,开发者可以不断提升自己在Android生命周期管理方面的专业技能。

    Android应用源码之8.Activity生命周期-IT计算机-毕业设计.zip

    Activity生命周期的理解和掌握对于任何Android开发者来说都是至关重要的。本篇将详细探讨Activity的生命周期,以及如何在毕业设计中有效利用这些知识。 首先,Activity的生命周期包括几个主要状态:初始化、可见、...

    Fragment与Activity之间通信实例

    每个Fragment都有自己的生命周期,但同时也受到其所在Activity生命周期的影响。 要实现Fragment与Activity之间的通信,我们需要使用一些关键的API方法: 1. **setArguments(Bundle)**:在创建Fragment时,我们可以...

    android-testing-master.zip

    它提供了对应用生命周期、数据存储、网络通信等各个方面的测试支持。在Instrumentation测试中,测试代码和被测试代码一起运行在同一进程中,可以对应用的每一个细节进行深入的检查。 在“android-testing-master”...

    Android四大基本组件介绍与生命周期 pdf 介绍

    ### Android四大基本组件及其生命周期详解 #### 一、Android四大基本组件概述 Android四大基本组件是Android应用程序的核心组成部分,它们分别是Activity、Service、ContentProvider和BroadcastReceiver。这四个...

Global site tag (gtag.js) - Google Analytics