`

Android学习3——Activity生命周期

阅读更多

原创内容,转载请注明出处

1、Activity生命周期

Activity翻译成中文表示活动、活跃。在Android中Activity表示的是与用户进行交互的界面,故而Activity是Android的一个重要组件,Android给它定义了它的生命周期,以便资源回收。以下是Activity的生命周期。



如上图可以看出Activity的生命周期可分onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()、onDestroy()七个阶段。

onCreate方法:Activity第一次被创建时调用,通常在该方法中创建视图,绑定监听器。

 

onStart方法:Activity将要在前台可见的时候调用,如果之后前台可见,调用onResume,如果不可见调用onStop。

 

onResume方法:Activity在前台可见,正与用户交互。

 

onPause方法:当一个新的Activity被创建启动时,使得原本的Activity不可用,则调用该暂停方法。之后如果被唤醒,则调用onResume,如果不可见,则调用onStop停止方法。

 

onStop方法当一个新的Activity被创建启动时,使得原本的Activity不可见,则调用该停止方法。之后如果被唤醒,则调用onRestart方法重启Activity。

 

onRestart方法:当一个Acrivity从停止状态被唤醒时,则调用重启方法。比如调用返回键。

 

onDestroy方法:Activity手动调用finish方法或者被系统要求资源回收时,调用该方法。

 

当系统资源不足,系统会进行资源回收,会把处于onStop、onRestart、onDestroy状态的Activity进行回收。

 

2、Task任务栈

当多个Activity运行时,一般只会有一个Activity和用户进行交互,Android将这些Activity保存在一个任务栈中(栈采用先进后出),Android应用程序每次显示的Activity都处于栈顶的位置。当用户按下返回键时,会将栈顶上的Activity弹出(即当前Activity进入onDestroy状态),显示下一个Activity(即弹出后栈顶上的Activity)。

关于栈的学习可以搜索相关资料,主要的特性是先进后出,后进先出。

 

3、案例测试

拿上个例子(Acrivity之间跳转)进行修改,让MainActivity和FirstActivity都实现这7个方法,并且打印相关信息。

修改后MainActivity类代码如下

package com.cygoat.myapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("-----mainActivity onCreate------");
	}
	
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		System.out.println("-----mainActivity onStart------");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		System.out.println("-----mainActivity onRestart------");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		System.out.println("-----mainActivity onResume------");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		System.out.println("-----mainActivity onPause------");
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		System.out.println("-----mainActivity onStop------");
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		System.out.println("-----mainActivity 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;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	
	public void sendMessage(View view){
		Intent intent = new Intent(this,FirstActivity.class);
		EditText text = (EditText) findViewById(R.id.message);
		intent.putExtra("message", text.getText().toString());
		startActivity(intent);
	}
}

 

FirstActivity代码如下

package com.cygoat.myapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class FirstActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_first);
		Intent intent = getIntent();
		String message = intent.getStringExtra("message");
		TextView textView = (TextView) findViewById(R.id.result);
		textView.setText("内容为:"+message);
		System.out.println("-----FirstActivity onCreate------");
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		System.out.println("-----FirstActivity onStart------");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		System.out.println("-----FirstActivity onRestart------");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		System.out.println("-----FirstActivity onResume------");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		System.out.println("-----FirstActivity onPause------");
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		System.out.println("-----FirstActivity onStop------");
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		System.out.println("-----FirstActivity 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.first, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

 

1.进入应用程序时,首先进入MainActivity界面。

 

 

 

如上图打印日志可以看出,创建MainActivity时,会依次调用MainActivity的onCreate、onStart、onResume方法。
 

2.点击send按钮时,跳转到FirstActivity界面。如下打印日志

 


 

 

如上打印日志可以看出从MainActivity跳转到FirstActivity时,首先会调用MainActivity的onPause;之后启动FirstActivity,依次调用FirstActivity的onCreate、onStart、onResume方法;最后由于调用MainActivity不可见,故而调用MainActivity的onStop方法来停止MainActivity(如果FirstActivity是对话框模式,即此时MainActivity依然可见,只是不可用,那么MainActivity不会调用onStop)。
 

3.点击返回按钮,从FirstActivity返回到MainActivity界面



 

 

当从FirstActivity返回到MainActivity时,会先调用FirstActivity的onPause方法;之后重启MainActivity,异常调用onRestart、onStart、onResume方法;最后调用FirstActivity的onStop、onDestroy方法

 

4.修改AndroidManifest.xml,将FirstActivity变成对话框模式,增加配置如下

 

 

则在MainActivity跳转到FirstActivity界面上时,结果如下。



 
 

 
如上可以看出由于FirstActivity是对话框模式,故而MainActivity在跳转到FirstActivity时,处于不可用状态,但依然可见,故而跳转过程中不会调用MainActivity的onStop停止方法。 

 

 

源代码如附件

  • 大小: 80.7 KB
  • 大小: 7.5 KB
  • 大小: 46.9 KB
  • 大小: 21.2 KB
  • 大小: 47.5 KB
  • 大小: 42.6 KB
  • 大小: 9.9 KB
  • 大小: 25.5 KB
  • 大小: 42.3 KB
分享到:
评论

相关推荐

    动手学Android之七——Activity生命周期

    "动手学Android之七——Activity生命周期"这个主题深入探讨了Activity如何在应用程序中创建、运行、暂停、停止以及销毁的过程,这对于理解和优化应用性能至关重要。在这个例子程序中,开发者将有机会实践这些生命...

    Android四大组件——Activity——Activity的生命周期.doc

    Android 四大组件——Activity——Activity 的生命周期 Android 四大组件中的 Activity 是一个非常重要的组件,它是用户与应用程序交互的入口。Activity 的生命周期是指从创建到销毁的整个过程,在这个过程中,...

    安卓Android源码——(Activity生命周期).zip

    本资料“安卓Android源码——(Activity生命周期).zip”着重探讨Activity从创建到销毁的各个阶段,以及在这些阶段中如何管理资源和响应用户或系统的事件。 Activity生命周期包含以下几个关键状态: 1. **初始状态**...

    安卓Android源码——(Activity生命周期).rar

    本资源“安卓Android源码——(Activity生命周期).rar”可能包含一系列关于Activity生命周期的讲解和示例代码,帮助开发者深入理解这一核心概念。 Activity生命周期主要包括以下几个关键状态: 1. **初始状态...

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

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

    Android 学习笔记——旋转模拟器方向,全屏,窗口生命周期

    总之,这篇文章深入浅出地介绍了Android应用开发中的重要概念,包括屏幕方向切换、全屏显示以及Activity生命周期管理。对于初学者来说,这些都是必须掌握的基础知识。通过实践和深入学习,开发者可以创建出更适应...

    Android教材————

    首先,我们来深入理解第六讲——Activity生命周期。Activity是Android应用程序的基本组件,它代表了用户可见且可与之交互的界面。生命周期包括了创建(onCreate())、启动(onStart())、显示(onResume())、暂停...

    Android学习之路——4.Activity简介

    这篇博客"Android学习之路——4.Activity简介"很可能会详细解释Activity的基本概念、生命周期以及如何在实践中使用它。 Activity作为Android应用程序的一个窗口,它可以显示用户界面,并响应用户的交互。每个...

    动手学Android之二——初识Activity示例代码

    当我们谈论"动手学Android之二——初识Activity示例代码"时,这通常指的是一个简单的教程,旨在帮助初学者理解如何创建并运行第一个Android应用,从而开始他们的Android开发之旅。 在Android中,Activity是负责显示...

    android的Activity的生命周期

    这些状态之间的转换是Activity生命周期的核心内容。 1. **创建(Created)**: 当Activity首次被创建时,会调用`onCreate()`方法。在这个阶段,开发者应初始化Activity的基本元素,如设置布局、数据绑定等。 2. **...

    Android学习笔记(十五)——碎片的生命周期

    本篇学习笔记将深入探讨碎片的生命周期,这对于理解如何有效管理Android应用的用户界面至关重要。 碎片的生命周期与Activity的生命周期紧密关联,但它们之间存在着一些差异。首先,让我们来看看一个Fragment的基本...

    安卓Android源码——(Activity跳转与操作).zip

    一、Activity生命周期 1. Activity有七个关键状态:初始化(Created)、可见(Started)、运行(Resumed)、暂停(Paused)、停止(Stopped)、销毁(Destroyed)以及重新创建(Restarted)。理解这些状态对于正确...

    Android学习之路——5.Activity子类

    Android系统通过栈来管理Activity的生命周期,当用户启动一个新Activity时,新的Activity会被压入栈顶,而当前Activity则被压入栈底。在用户操作或者系统资源紧张时,Activity会经历一系列的生命周期回调,如...

    Android学习1——第一个应用程序

    在这里,你将看到`onCreate`方法,这是每个Android应用生命周期的起点。在这个方法内,通常会设置布局视图,并执行其他初始化操作。 布局文件,通常位于`res/layout`目录下,如`activity_main.xml`。这是一个XML...

    安卓Android源码——模拟Activity进出栈.zip

    通过深入研究"安卓Android源码——模拟Activity进出栈.zip"中的内容,开发者可以更好地掌握Android系统如何处理Activity的生命周期和任务切换,从而编写出更符合用户习惯和系统性能的应用程序。对于进阶开发者来说,...

    安卓Android源码——模拟Activity进出栈.rar

    当我们谈论"模拟Activity进出栈"时,实际上是指在Android应用中如何管理和控制Activity的生命周期,以及它们在任务堆栈(Task Stack)中的行为。这个主题涉及到Android应用的基本架构和流程控制,对于理解和优化应用...

    安卓Android源码——Android游戏源码——忍者快跑.zip

    这个源码提供了实际应用实例,展示了如何构建一个完整的Android项目,包括项目结构、资源管理、Activity生命周期等基础知识。 2. **游戏框架**:游戏可能采用了某种游戏框架,如Unity、Cocos2d-x或者自定义的游戏...

Global site tag (gtag.js) - Google Analytics