[01] 四大组件之Activity

一、Activity的基本概念

概念:代表一个可以进行任务交互的窗口界面。可包含多层级的View和ViewGroup。

创建:继承一个Activity或着它已存在的子类。必须实现onCreate()方法,调用setContentView()来加载用户交互的布局。并在AndroidManifest.xml的<application>中配置一个<activity>的节点,指明android:name属性。

启动一个Activity:

(1)启动主Activity。清单文件配置“MAIN”action和“LAUNCHER”category。

(2)启动普通Activity使用intent。一般调用startActivity(),包含两种方式,显示和隐示意图。显示是指intent指明要启动的Activity名称,隐示是不指定具体的Activity,只描述一下intent的Action,或加上data等,让系统过滤intent-filter来挑选最合适的Activity。

(3)需要从启动的Activity中获取一个结果。用startActivityForResult()来启动Activity,需指明intent和requestCode,然后实现onActivityResult()回调接口来获取返回后的结果。onActivityResult()中需判断resultCode是否是成功返回,通过requestCode来判断是否响应的是指定的请求。

二、Activity的生命周期管理

为什么要管理生命周期,Activity是应用程序的主体,是用户体验的第一道窗口(所见),当然至关重要。这里的原则通常来说有以下几点需要遵循:

  1. 当使用你的app的时候,不会因为屏幕切换而导致程序crash(来电、闹铃、其它程序、旋转屏幕);
  2. 当用户没有使用或不需要某些组件的时候不要浪费宝贵的系统资源;
  3. 不会因为离开当前app一段时间而导致某些至关重要的用户使用进度丢失。
  4. ... ... ...

怎么管理,通过实现Activity生命各阶段的回调方法来管理。下面是一幅activity的回调方法和对于生命状态图:

其中只有三种状态是静态的,Activity可以再这三种状态上保持很长时间,其它状态会很快地切换掉,停留时间短。

  • Resumed:也称为runing状态,Activity在最前端,可捕获焦点,与之交互。
  • Paused:Activity被另外一个activity半遮盖(另外一个activity是半透明或只遮住屏幕一部分,总之Paused状态的Activity对用户是可见但不可操作的)
  • Stoped:Activity被完全隐藏,不被用户可见,

各个回调方法的常用操作:

onCreate():设置layout,定义成员变量,配置UI元素等,(尽量少做事情,不然等待activity显示的时间太长)

onRestart():上次Stopped后但未被重新启动该Activity。

onStart():继续维持你在activity里需要显示的资源,也可根据情况管理它们,或者注册广播等(时间也别长)

onResume():你在onPause()里需要释放什么,就要在这儿恢复什么

onPause():停止动画或其它导致CPU浪费的操作,释放一下资源,比如sencor、Camera等。为避免进入下一个activity时间太长,这个回调函数尽量别做CPU耗时的操作,具体原因参见下面activityA-->B的回调执行流程。

onStop():这儿可以把需要的数据存储到持久化存储(File、DB 等)

onDestroy():释放掉不需要的当前Activity用到的一切资源,比如子线程,cursor等。

另外两个类似生命周期的方法:

onSaveInstanceState() :一旦Activity进入非前台进程,即离开resumed状态(runing状态),都是有可能在极端情况下因系统内存不足导致该程序进程被杀死,所以如果我们需要保存该Activity UI上需要的一些信息,以便下次创建该Activity时重新使用这些信息(在Bundle里),我们便可以在onSaveInstanceState()里put需要的值进bundle。

onRestoreInstanceState():如果启动的Activity上次是被意外强制关闭,且需要恢复上次的使用进度值,用此回调实现。

从ActivityA启动ActivityB回调函数执行流程:(以下讨论activity的launchMode为standard)

从ActivityB 按返回键返回 ActivityA:

旋转屏幕ActivityA:

如果不想要重新create activity,可以在AndroidManifest.xml里配置<activity>里加上如下配置。

android:configChanges="orientation|screenSize|keyboardHidden"

三、Activity的四种启动模式及应用场景

启动模式的设置:

<activity android:name=".MainActivity" android:launchMode="standard" />

也可以在startActivity()的时候可用给Intent加相应的标志位FLAG_ACTIVITY_***。

四种启动模式:

  • standard

标准启动模式,每次激活一个Activity时都会创建一个该Activity的实例(哪怕是自己),并放入任务栈中。

  • singleTop

如果任务栈栈顶正好存在该Activity的实例,就重用该实例。(仅限于栈顶,重用时会调onNewIntent()

  • singleTask

整个任务栈只能有一个该Activity的实例,如果在栈中已经存在该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

  • singleInstance

在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中

应用场景:

默认值是standard,具体情况具体分析,但要确保Activity的可用性测试,包括启动过程,和其它Activity交互过程,返回键Home键等等,

四、其它

1、关于<activity>在AndroidManifest.xml中的配置属性的中文介绍

参考这位博主的博客:http://www.cnblogs.com/popapa/p/android_activity-element.html

2、Activity弹出Toast或者Dialog不会引起生命周期的变化。

时间: 2024-08-27 23:27:40

[01] 四大组件之Activity的相关文章

Android四大组件之Activity(活动)及其布局的创建与加载布局

Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个或多个活动. 手动创建Activity的过程详解 到现在为止,你还没有手动创建过活动呢,在第一个安卓工程中,HelloWorldActivity是ADT帮我们创建的,手动创建活动可以加深我们的理解,因此现在是时候应该自己动手了. 首先,你需要再新建一个 Android 项目,项目名可以叫做 Acti

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

Android学习之路——Android四大组件之activity(二)

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据.还有一种数据类型是parcelable和serialable 用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下. 一.利用bundle传递基本数据类型 1.启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(inte

【Android的从零单排开发日记】之入门篇(四)——Android四大组件之Activity

在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页面类似.当然,这种相似性主要体现在设计思想上.在具体实现方面,Android的Activity组件有自己的设计规范,同时,它能够更简便地使用线程.文件数据等本地资源. 一.Activity 的生命周期 Activity 的生命周期是被以下的函数控制的. 1 public class Activity

Android学习之路——Android四大组件之activity(一)

一.什么是Activity? Activity简单的说就是一个界面,我们在Android手机上看到的每一个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注册activity,这个activity就创建成功了. public class MyActivity extends Activity { } 2.清单文件注册activity <application android:a

Android四大组件之Activity详解 &middot; yclog

Activity生命周期: onCreate:在Acitivty第一次创建时调用,用于做初始化的工作onStart:onCreate调用后调用,此次界面对用户来说无法看见onResume:此次界面可见并显示到前台,且当前Acitvity位于当前栈顶,并且处于运行状态onPause:表示当前Activity正在停止,常做一些存储数据.停止动画等工作(不做耗时操作)onStop:表示当前Activity即将停止,一般做微量级的回收工作onDestory:表示当前Activity即将被销毁,可做一些回

安卓笔记五--四大组件之Activity(页面跳转,不同窗体传递数据)

安卓四大组件都是非常重要的知识,今天来说Activity .老规矩,用一张图来介绍今天的内容. 图片看不清的话可以右键新窗口打开 一,概述 Activity 是 Android 四大组件之一,它用于展示界面. Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务. Activity 中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过 setContentView(View)来显示指定控件. 在一个 android 应用中,一个 Activity 通常

四大组件之Activity小结

一大波面试就要靠近,赶紧总结总结一些基础问题 1.Activity的概念 是Android应用层开发的四大组件之一,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是Android的UI部分, 注1:Activity之间通过Intent进行通信.(在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据) 注2:Activity与View的区别 1)     Activity是四大组件中唯一一个用来和用户进行交互的组件.可以说Activit

android四大组件之Activity - (1)从源码中理解并巧用onWindowFocusChanged(boolean hasFocus)

这里开始到后面,想趁着有时间,将Android四大组件和一些系统组件做一些总结和记录.由于网上已经有很多写的很好并且总结也全面的文章.小弟我也囊中羞涩不敢献丑,就记录一些自己觉得重要的有用的知识点,顺便大家一起学习讨论啥的也好 Activity作为四大组件之一,对于整个Android开发有多重要就无需赘言了.关于它的生命周期,这里借用下官网的图,便一目了然: 那么它的生命周期和我们所说的onWindowFocusChanged(boolean hasFocus)方法有何关系? Activity生