当用户需要对手机通过屏幕进行交互时,比如打一个电话,拍张照片,发送一个邮件,或者查看地图。开发者就需要实现一个活动(Activity)。每个活动都将作为一个提供用户使用接口的窗口。它可以填满整个屏幕,也可以小于、大于屏幕甚至漂浮在其它窗口上面。作为android应用程序中最重要的四大组件之一。今天我们来学习一下Android中Activity的生命周期。
首先,创建一个android project,包含两个ActivityA和ActivityB
分十种情况讨论

第一,正常启动Activity A,输出结果如下:

第二,从ActivityA跳到ActivityB,并且ActivityB全屏。即ActivityA被ActivityB完全完全覆盖,输出结果如下:

第三,在第二种的情况下,从ActivityB返回到ActivityA,输出结果如下:

第四,从ActivityA跳到ActivityB,并且ActivityB非全屏。即ActivityA没有被ActivityB完全完全覆盖,输出结果如下:

第五,在第四种的情况下,从ActivityB返回到ActivityA,输出结果如下:

第六,在第一种情况下,点击home键,输出结果如下:

第七,在第六种的情况下,长按home键盘,从任务管理器中调出ActivityA,输出结果如下:

第八,在第一种情况下,点击电源键,输出结果如下:

第九,在第八种的情况下,在打开电源键回到ActivityA,输出结果如下:

第十,退出ActivityA,输出结果如下:

在对上述十种情况讨论完,可能觉得有点复杂,其实一点都不复杂,在梳理一下。首先最容易发现的是onCreate和onDestroy从头到尾都只执行了一次。onCreate在一个活动最先开始启动的时候执行了一次,onDestroy在活动结束关闭的时候执行了一次。另外可以发现除了在第四五两种情况下,其余情形的结果都相同,离开活动A,则A一次执行onPause和onStop,并且返回A的时候,一次执行onRestart、onStart和onResume。于是可以得出如下结论。只要不是在A进入到非全屏的其它活动中,则A执行onPause和onStop,反之只执行一个onPause,从其它活动返回,A执行onRestart、onStart和onResume,反之执行onResume。

在测试四五两种情况的时候,只要在AndroidManifest.xml中队ActivityB的节点中添加如下一行代码:

android:theme="@android:style/Theme.Dialog"

附活动ActivityA代码:

package com.yuxianglong.view;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button; /**
*
* @ClassName: ActivityA
* @Description: 对Activity生命周期的测试,重载了onCreate,onStart,onResume,
* onStop,onPause
* onDestroy,onRestart七个方法
* @author yuxianglong
* @date 2013-7-9 上午9:09:22
*
*/
public class ActivityA extends Activity { private Button button;
private String Tag = "yuxlong2010"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(Tag, "I'm onCreate");
setContentView(R.layout.activity_a);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(ActivityA.this,ActivityB.class));
}
});
} @Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.d(Tag, "I'm onStart");
} @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.d(Tag, "I'm onResume");
} @Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.d(Tag, "I'm onStop");
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d(Tag, "I'm onDestroy");
} @Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.d(Tag, "I'm onRestart");
} @Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.d(Tag, "I'm onPause");
}
}

图解:Activity生命周期的更多相关文章

  1. Android学习整理之Activity生命周期篇

    一.Activity生命周期说明   Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...

  2. [JIT_APP]Activity生命周期相关的7个方法

    先发一张安卓官方文档里面的Activity生命周期图解 下面在对这7个生命周期内相关的方法做一些简单的介绍 OnCreate() 当Activity被创建的时候,会自动运行该方法.该方法做一些初始化动 ...

  3. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  4. Activity生命周期(深入理解)

    今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资 ...

  5. Android Activity生命周期

    从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个a ...

  6. Android Activity生命周期详讲

    管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...

  7. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

  8. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...

  9. 安卓activity生命周期

    相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法, ...

随机推荐

  1. [IOS]Setting Bundle + StoryBoard

    用storyboard添加一个导航栏,其中首页有一个switch,与setting联动,还有一个button,使用modal连接另一个viewControl,其上也有一个按钮,按下销毁本viewCon ...

  2. Matlab的parfor并行编程

    Matlab的parfor并行编程 通常消耗最多计算资源的程序往往是循环. 把循环并行化.或者优化循环体中的代码是最经常使用的加快程序执行速度的思路. Matlab提供了parforkeyword,能 ...

  3. javascript (八) 语法格式

    JavaScript 对大小写敏感. JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getEle ...

  4. 计算VMT的长度

    function GetVirtualMethodCount(AClass: TClass): Integer; begin Result := (PInteger(Integer(AClass) + ...

  5. ThinkPhp学习08

    原文:ThinkPhp学习08 一.普通查询方式 a.字符串 $arr=$m->where("sex=0 and username='gege'")->find(); ...

  6. Oracle 验证IOT表数据存储在主键里

    iot表测试: 在create table语句后面使用organization index,就指定数据表创建结构是IOT.但是在不指定主键Primary Key的情况下,是不允许建表的. create ...

  7. pptv web前端面试题

    今天上午一考完试,就一直等待pptv的电话,结果下午就收到了pptv的通知(pptv的效率还是很不错的,之前面试官和我说在一到两周之内给回复,结果过了7天就给回复了,赞一个)因为我面试的是web前端( ...

  8. 此三层非彼三层——MVC&UBD

    学习了三年编程了,到如今这个阶段,開始接触架构,開始认识架构,怎样设计一个程序的结构,学名称"架构模式"(architectural pattern).个人经历告诉我这在编程中是一 ...

  9. Android开发之style属性和提前定义样式

    摘要 Android平台定义的主题样式: android:theme="@android:style/Theme.Dialog" // 将一个Activity显示为对话框模式and ...

  10. 单例模式 - 程序实现(Java)

    我们知道单例模式,其实就是返回一个被调用类的实例. 在频繁的进行实例(Instance)创建过程,难免过多的进行new InstanceName():我们可以只通过调用一个方法解决. 在进行设计模式的 ...