3.2 活动、意图和任务
Android活动既是用户交互单元(通常填满Android移动设备的整个屏幕)也是执行单元。开发交互式的Android程序时,首先要继承Activity类。活动提供了在Android应用中可重用、可交换的UI组件流。
那么,一个活动如何调用另一个活动,如何将信息传递给第二个活动呢?不同活动之间的基本通信单元是Intent类。Intent类是一个抽象的功能描述,用来定义一个活动要求另一个活动执行的功能,类似于是第二个活动提供的功能的一张照片。Intent类是构建松散耦合的系统的基础,它支持一个活动启动另一个活动。应用发布Intent时,可能已经有几个不同的已注册的活动都能实现这个功能。在本书第1章中为验证Android SDK是否正确安装而创建test应用的过程中,我们已经“编写”过了和活动相关的代码。下面再一起来看看这段代码:
当系统启动这个活动时,它会首先调用Activity的子类TestActivity的构造函数,然后调用Activity的onCreate方法。这会加载并显示在main.xml文件中定义的视图结构(view hierarchy)。onCreate方法则开启了Activity的生命周期,这在第11章会详细
说明。
Activity类是Android系统中最重要的类之一,支持应用的模块化及功能共享。Activity会和Android运行时交互,以实现应用生命周期的关键部分。每个活动可以使用类Context独立配置。
在绝大多数情况下,一个Android应用中的每个活动都是独立于其他的活动的。一个活动不会在代码中直接调用另一个活动的方法。Android框架中的另外一个元素(Intent)负责通信。因此,不建议引用活动对象。Android运行时环境负责创建并管理应用的活动及其他各种组件,回收它们所使用的内存,以确保每个任务占用的内存相对较少。你会发现专门对活动内存进行管理时,效率反而会非常低。
注意: 和用object来表示类的实例很相似,我们使用活动来表示类Activity的实例。
在Android中的用户界面流控制,不是基于方法调用的。在其所采用的机制中,应用使用Intent描述清楚它想要的功能,系统负责找出一个匹配的实现。Android的Home桌面就是使用这些描述来启动应用的,每个应用也可以按照自己的意愿使用自己喜欢的意图来实现这种桌面功能。Android开发人员将这种结果流称为“任务”(task):跨越多个应用的一组活动,而且实际上是多个进程。图3-3显示了跨越三个应用并涉及了多个活动的一个任务(表3-1给出的例子)。组成该任务的活动链跨越了三个独立的进程和堆,它们可以相互独立存在,其他应用也可能会为同一个活动子类另外创建
实例。