`
limdengrock
  • 浏览: 35207 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

菜鸟Android开发系列之:Active的生命周期

阅读更多

 一.Activity的状态

Activity在任何时间下都处于以下四种状态之一:

1.       活动: Activity由用户启动,正在运行,并且在前台;

2.       暂停: Activity正在运行并且可见,但是被一个通知或者某个Activist覆盖了,用户可以看到,但不能与之交互;

3.       停止:Activity正在运行,但被已启动的另一个Activity所隐藏,应用程序无法直接向用户呈现任何有意义的内容,但可以通过通知的形式与用户通信;

4.       死亡: Activity从未启动或者被终止了。

二.Activity的生命周期

1.       onCreate()onDestroy():当Activity首次启动的时,将用一个空参数(null)来调用onCreate(),当Activity关闭时将调用onDestroy()

2.       onStart()onRestart()onStop()Activity在用户可见时调用onStart(),重启Activity时将调用onRestart(),停止Activity时调用onStop()

3.       onPause()onResume()Activity被暂停时调用onPause()Activity和用户交互时调用onResume()

 

 

示例:

第一个Activity的Code:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
	android:id="@+id/txtActivity"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	/>
<Button
	android:id="@+id/second"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	/>
</LinearLayout>

 

package com.ap;

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

public class acttivityPeriodAndroid extends Activity {
	
	private final static String TAG = "开始测试Active的生命周期!";
    private TextView txt;
    private Button btn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v(TAG, "onCreate");
        setContentView(R.layout.main);
        txt = (TextView)findViewById(R.id.txtActivity);
        btn = (Button)findViewById(R.id.second);
        
        txt.setText(R.string.txtAct);
        btn.setText(R.string.btnSubmit);
        btn.setOnClickListener(new ButtonListener());
    }
    
    class ButtonListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			Intent ten = new Intent();
			ten.setClass(acttivityPeriodAndroid.this, SencondActivity.class);
			startActivity(ten);
			finish();
		}
    }

	@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 onStop() {
		super.onStop();
		Log.v(TAG, "onStop");
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.v(TAG, "onDestroy");
	}
}

第二个Activity的Code:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
	android:id="@+id/txtSecond"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	/>
<Button
	android:id="@+id/exit"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	/>
</LinearLayout>

 

package com.ap;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SencondActivity extends Activity {
	
	private TextView txtSen;
	private Button btnExit;
	private final static String TAG = "第二个Activity生命周期开始测试";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		Log.v(TAG, "onCreate");
		setContentView(R.layout.second);
		
		txtSen = (TextView)findViewById(R.id.txtSecond);
		btnExit = (Button)findViewById(R.id.exit);
		
		txtSen.setText(R.string.txtSen);
		btnExit.setText(R.string.btnQuit);
		btnExit.setOnClickListener(new ButtonListener());
	}
	
	class ButtonListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			finish();
		}	
	}

	@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 onStop() {
		super.onStop();
		Log.v(TAG, "onStop");
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.v(TAG, "onDestroy");
	}
}

 

 

运行后的日志:



 

在启动一个新的Activity阶段:会依次执行3个生命周期OnCreate(),OnStart()和OnResume()

在Activity失去焦点阶段:如果新的Activity完全遮挡住了原有的Activity,会调用OnPause()和OnStop();如果新的Activity只是部分遮挡,如对话框形式的Activity,只会调用OnPause()

在Activity重新获得焦点阶段:如果原Activity是被完全遮挡住的,将会调用OnRestart()、OnStart和OnResume().如果原Activity不是被完全遮挡住的,系统将只调用OnResume().

在关闭Activity阶段:会依次执行Onpause()、OnStop()、OnDestroy()

 

 Task运行机制

 

Task是一个存放很多activity的栈,所有的activity对象在Task栈中被组织成同一个单元。

 

(1)当应用程序启动后,将默认的第一个activity对象压入task栈中.
(2)当点击按钮后启动第二个activity,该Activity对象被压入栈中;手机显示Task栈中顶部的元素,之前的Activity对象还存放在Task栈中,没有被销毁。
(3)当按下back按钮后,处于Task栈顶部的Activity对象被弹出。

 

但如果在通过StartActivity(intent)启动新的activity后,再调用finish(),之前的Activity对象就会在Task栈中被销毁。

 

注意:Task栈中不允许重新排序。 

  • 描述: 运行日志
  • 大小: 122.7 KB
  • 大小: 55.5 KB
分享到:
评论

相关推荐

    菜鸟Android开发系列之:线性布局

    在Android应用开发中,线性布局(LinearLayout)是开发者最常用的一种布局管理器。它按照垂直或水平方向将子视图(View)排列,形成一个单一的行或列。本系列教程将深入探讨线性布局的使用方法和技巧,帮助初学者更...

    Android开发入门之路(初学者必读).zip

    "Android开发入门之路(初学者必读).zip"这个压缩包可能包含了一系列针对这些问题的教程、指南或者案例,帮助初学者系统地学习和掌握Android开发的基础知识。 首先,我们来看一下压缩包中的四个文件名,虽然没有...

    Android应用开发入门教程(经典版)&android;快速入门

    5. **生命周期**:每个Activity都有其特定的生命周期,包括onCreate()、onStart()、onResume()、onPause()、onStop()和onDestroy()等方法。理解这些方法何时被调用,对于处理应用状态和资源管理至关重要。 6. **...

    Android开发实例:手机助手 源码

    5. **服务(Service)**:手机助手可能包含后台服务,如定时任务、音乐播放等,这需要理解Service的工作原理和生命周期。 6. **BroadcastReceiver**:通过BroadcastReceiver监听系统或自定义广播事件,实现特定功能的...

    Android开发入门经典pdf

    系统的、循序渐进的学习Android开发所需的知识 n 第一部分:Android的入门基础 包括:Android是什么、有什么、能干什么,Android开发的环境构建、 HelloWorld开发,HelloWorld基本分析等 n 第二部分:Android应用核心...

    android商城源码(菜鸟商城)

    总的来说,“菜鸟商城”源码是一个功能完备、注释详尽的Android商城应用实例,对于学习Android开发和实际项目经验的积累都有很大帮助。通过深入研究这份源码,开发者不仅可以掌握Android应用开发的基本技能,还能...

    【菜鸟谈android】(二) android基本概念及处理过程

    这篇“【菜鸟谈android】(二) android基本概念及处理过程”可能会深入浅出地介绍Android开发的一些核心要素。虽然没有具体的描述内容,但从标题我们可以推测文章可能涵盖了以下几个方面: 1. **Android系统架构**:...

    嵌入式系统开发之道-菜鸟成长日志与项目经理的私房菜part1(Part2免费)

    嵌入式系统开发之道:菜鸟成长日志与项目经理的私房菜 Part2 免费!

    android app项目菜鸟微博

    本项目"菜鸟微博"是一个基于Android的社交媒体应用程序,旨在为初学者提供一个学习和实践Android应用开发的实例。通过这个项目,我们可以深入了解Android SDK、布局设计、数据存储、网络请求等核心概念。 1. **...

    linux系统下搭建android开发平台

    菜鸟系列之一:在UBUNTU LINUX 下搭建ANDROID开发平台。 本文档系统的整理了在ubuntu系统下如何搭建android开发平台,对android感兴趣的同学可以借鉴学习下。

    Android菜鸟日记25-android反编译

    这篇“Android菜鸟日记25-android反编译”将带你走进Android反编译的世界,揭示APK背后的秘密。 首先,让我们了解什么是Android反编译。Android应用主要由Java语言编写,经过编译后生成Dalvik字节码(.dex文件),...

    傻瓜式Android APP开发入门教程

    - **Android SDK** 包含了一系列用于开发Android应用程序的工具。可以通过访问Android开发者网站下载最新的SDK包。如果您还没有集成开发环境(IDE),可以选择下载包含Eclipse的完整包;如果已经有IDE,则可以选择...

    深入浅出Android——Android开发经典教材.pdf

    - **解读程序流程**:理解Android应用的运行机制,包括Activity生命周期、事件处理机制等,这对于编写高质量的应用至关重要。 - **完成BMI程序**:本章将以BMI计算应用为例,详细介绍如何从零开始构建一个完整的...

    五本android开发书籍+五个项目源码下载

    该教程系列由安卓航班网提供,适合初学者入门学习Android开发,目前已更新至第三讲。每一讲都是原创内容,旨在帮助初学者逐步掌握Android开发的基础知识和技术要点。 - **第一讲**:介绍Android开发环境搭建,包括...

    android学习经典小例子菜鸟必备

    "android学习经典小例子菜鸟必备"这个资源正提供了这样的实践平台,让你的编程之路有迹可循。通过对这些实例的深入研究,你可以逐步提升自己的Android开发技能。 在压缩包文件"tiantianshuqian-master"中,我们可以...

    开发之道 菜鸟成长日志与项目经理的私房菜

    嵌入式系统开发之道 菜鸟成长日志与项目经理的私房菜,部分章节

    android应用开发流程

    Android 应用开发流程是一系列复杂的步骤,需要掌握多种技术和技能。本文旨在帮助菜鸟开发者快速入门 Android 应用开发,提供了详细的流程和经验总结。 准备工作 在开始 Android 应用开发之前,需要具备以下技能:...

    VS2012菜鸟WDF驱动开发系列

    VS2012菜鸟WDF驱动开发系列 本篇文章讲述了VS2012菜鸟WDF驱动开发系列的第一个部分,即搭建VM+Windbg调试平台。作者以新手的身份,记录了驱动开发的学习过程,并分享了自己的经验。 知识点1:WDF驱动开发 WDF...

    菜鸟商城Android全套视屏教程

    # 菜鸟商城 # 是一个仿淘宝客户端的实战课程,功能包括:1.支付(支付宝,微信,百度钱包) 、首页 、热卖 、商品大全 、购物车 、我的 、商品列表 、商品详情 、注册/登录 、收货地址 、我的订单 、我的收藏 ..... ...

    Android系列问答汇总

    在Android系列问答汇总中,我们可以探索一系列关于Android操作系统和应用开发的关键知识点。这些知识点涵盖了从初学者的基础概念到高级开发者的技术挑战,旨在帮助学习者逐步提升Android开发技能。 首先,我们要...

Global site tag (gtag.js) - Google Analytics