本节内容
理解Activity
Activity的生命周期
实例:观察翻转屏幕导致的Activity状态变化
点此下载:lesson4.zip
一、理解Activity
Activity是Android程序的4大组件之一。
Activity是Android程序的表示层。程序的每一个显示屏幕就是一个Activity。
学过WEB开发的同学,可以把Activity理解成网页中的一个JSP文件;或者你可以把它理解成一个Windows的窗口。
下面看一下Activity类的继承关系:
从这里可以看到Activity是Context类的子类,大家对此先有个印象。
二、理解Activity的生命周期
手机最重要也是最基础的功能是打电话,也就意味着电话来的时候可能随时要把现在的程序暂停,如果电量不足的时候也可能随时要把现有程序关闭;因此Android程序和电脑上的程序有所不同,具体到Activity,Activity的生命周期不是自身控制的,而是由Android系统控制的。
在android中Activity有四种基本状态:
1、Running
位于屏幕最前端时,此时处于可见状态,和用户可交互的状态。
2、Paused
当Acitivy被另一个透明的或者非全屏的Activity覆盖时的状态叫Paused状态,虽然可见但不可交互。
3、Stop
当Activity被另外一个Activity覆盖、界面不可见时处于Stop状态。
4、Killed
Activity被系统杀死或者跟本没启动时就是Killed状态。
我们下面看一下Activity的生命周期:
下面是上图的简单翻译版本:
Activity栈:
Android通过Activity栈的方式来管理Activity。
正在运行的Activity 处在在栈的最顶端,它是运行状态的;
当有新Activity进入屏幕最上端时,原来的Activity就会被压入第二层,如果他的屏幕没有被完全遮盖,那么他处于Pause状态,如果他被遮盖那么他处于Stop状态。
当然不管你出于任何一层,都可能在系统觉得资源不足时被强行关闭,当然关闭时在栈底的程序最先被关闭。
譬如:当你在程序中调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:他告诉 Activity Manager该Activity实例可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,把原 Activity 压入到栈的第二层,从 Running 状态转到 Paused 状态。
三.实例:观察翻转屏幕导致的Activity状态变化
Activity类中定义了和生命周期相关的一些方法,这些方法会在状态改变时被调用,譬如创建时调用的方法onCreate()。因此我们可以写一个程序,在程序的每个一个方法中写注释,然后看看运行时注释的打印顺序来跟踪Activity的状态变化。
下面是程序代码:
- package android.basic.lesson4;import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;public class MainActivityLife extends Activity {
- String tag =”[MainActivityLife]“;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Log.i(tag, “onCreate”);
- }@Override
- public void onStart(){
- super.onStart();
- Log.i(tag, “onStart”);
- }@Override
- public void onPause(){
- super.onPause();
- Log.i(tag, “onPause”);
- }@Override
- public void onResume(){
- super.onResume();
- Log.i(tag, “onResume”);
- }@Override
- public void onStop(){
- super.onStop();
- Log.i(tag, “onStop”);
- }@Override
- public void onDestroy(){
- super.onDestroy();
- Log.i(tag, “onDestroy”);
- }
- }
复制代码
然后调出LogCat工具,来观察程序的运行细节。通过LogCat的过滤器我们可以看到程序启动、屏幕翻转、按后退键程序退出的过程,这有助于我们验证刚才所学的知识。
我们可以看到屏幕翻转时,Android系统把ActivityLife这个Activity先杀死(具体顺序是先暂停、后关闭再销毁),然后再启动(具体顺序是先创建,后启动再恢复)。通过这个例子我们也清楚的看到了,是Android系统而不是程序员在控制Activity的生命周期。
本节课就到这里。
分享到:
相关推荐
第四讲:Activity入门指南 Activity 第五讲:用户界面 View(一) FrameLayout, LinearLayout 第六讲:用户界面 View(二) AbsoluteLayout,RelativeLayout 第七讲:用户界面 View(三) TableLayout 第八讲:...
第一讲:Android开发环境的搭建 第二讲:Android系统构架分析和应用程序目录结构分析 第三讲:Android模拟器的使用 第四讲:Activity入门指南 ······
这段旅程是android开发学习之旅的核心。本集疯兄给大家带来的是activity,activity不要单纯从字面意义理解为活动,activity可以理解为你的app程序的门面或者面子工程,也就是用户看到的、摸到的、听到的无不都是...
Android学习笔记(九):Activity-RelativeLayout
Android学习笔记(十一):Activity-ListView
Android学习笔记(十二):Activity-Spinner
Android学习笔记(十):Activity-TableLayout和ScrollView
软件介绍: 魔乐科技Android开发实战经典程序代码资源合集:第一部分:走进Android的世界第二部分:Activity程序开发第三部分:Android高级开发第四部分:Android应用开发
Android学习笔记(八):Activity-OpenMenu和LinearLayout
[转载]Android学习笔记(五):Activity和main.xml文件
第4章 Android用户界面 Android 用户界面,讲述了Android中的事件处理机制、布局管理和常用组件的使用。 第5章 Android基本程序单元Activity Android 基本程序单元Activity,讲述了Android中重要组件Activity的...
《Android应用开发详解源码》目录第1章 Android概述 第2章 Android开发基础 第3章 Android中的资源访问 第4章 Android用户界面 第5章 Android基本程序单元Activity 第6章 Android组件之间的信使Intent 第7章 Android...
1、设计界面,包括四个按钮,两个文本框。单击对应按钮可以启动对应activity。假定Activity A为启动Activity。 2、修改 Activity 的启动模式 LaunchMode,并通过 Log 信息来体会不同启动模式所对应的Activity 和 ...
androidx activity-1.2.3版本资源包
Android应用开发多个activity完全退出程序方法,亲测可用
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 ...
以下这篇文章的一个Demo: http://blog.csdn.net/justandroid/article/details/7052888
Android应用开发详解: 从基础到案例覆盖了Android应用开发的三大领域:基础应用、网络应用和游戏应用。 第一篇 基础篇 第1章 Android概述 1.1 Android的前世今生 1.1.1 Android的产生 1.1.2 Android的...
Android中采用任务栈的形式来管Activity。栈是一种“先进后出”的数据结构。 Android中的任务栈 Task Stack in Android Activity的启动模式 Activity startup mode Activity的启动模式 Activity startup mode ...