{转}Activity 、Intent深入解析[醍醐灌顶]

学习Android SDK有段时间了,对Activity 、Intent的学习与使用都比较了解。第一次完整的学习Activity 、Intent后,我就感觉这似乎与Windows COM技术有些似曾相识的感觉,写了一篇将Activity 与 COM做了比较,但是一直感觉意犹未尽,前几天在程序员杂志中看到一篇经典的文章,茅塞顿开。

声明:源文章来源于程序员2008年的第一期杂志,本人将这篇文章整理后与大家分享。

首先我们来了解一个概念:Mash-up。

什么是Mash-up?

举个简单的例子:从一个网页上抓下一块XHTML 数据,再从另一个Web Services 那里获得一些XML数据,就可以把这两块数据mash-up起来,形成新的XML数据,并且这一数据可以在此被别人mash-up。

Android、Intent的深入解析

在Android软件环境中,应用程序是由一组Activities 组成的,而每一个Activity 不但是本应用的组成部分,而且也对外开放,可以向同一系统内任何一个外部应用提供服务。例如,编制手机短信无疑需要一个小型编辑器,这个编辑器在Android中由一个Activity 实现,并且可以以构件的形式暴露出来。如果开发者在开发另外一个应用程序的过程中需要一个小型编辑器,则无须重新开发,可直接调用短信应用中的这个编辑器Activity 得以实现。这种多层次的组合能力,与Web 2.0 基于XML的mash-up如出一辙。

Android 调用activity 所提供的接口(服务),并不是直接调用,而是借助一个叫做Intent 的机制实现的。所谓intent 就是对于服务的调用请求。与其他技术体系不同的是,Android可以无须明确地指定要那个组(activity)来满足自己的调用请求,而是可以要求系统根据它的要求,自动选择一个能够满足要求的activity 来提供所需的服务。

大致的过程如下:每一个activity 都可以对外提供一系列的服务,这些服务以Intent-filter 的形式对外公开,并提交给系统进行注册。所谓intent-filter,就是一个activity 的能力列表。例如,一个用于编辑短信正文的文本编辑器activity 应通过AndroidManifest.xml文件中的<intentfilter>元素向系统注册,表明activity具有EDIT 和VIEW文本数据的能力,如果有另一个客户要求EDIT和VIEW一段文本数据,则系统可以调用本activity 予以满足。Activity 本身既是提供服务的组件,也可以是组件的客户。

例如一个备忘录应用中,应用启动时可以显示一个现有备忘录的列表,这是由一个activity 实现的。而当用户选择编辑或新建一个备忘时,这个activity 需要一个文本编辑器activity 来完成这项工作。它怎么做呢?当然不需要自己从头开发一个,而只需要以intent 的方式告诉系统说:“我需要一个具有编辑文本能力的activity 来帮我编辑一个备忘信息”,系统会自动寻找在<intentfilter>中声称具有该项能力的activity,然后激活这个activity,用来满足这个intent。

Windows平台的开发人员会发现,上述的工作方式与COM 很相近,2者的比较如下图所示:

Mush-up的作用

如果Android 平台提供的基础构件足够丰富,则开发新的应用程序将变得高度简化:开发者可以利用现Activities 快速组合出应用程序的主体,只有程序的特色功能需要亲自实现,这无疑极大地提升了生产力和软件质量。不但如此,新实现的Activities 也可以作为其他应用的构件而被再次组合。

总结说明

Mash-up 是Web 2.0 平台上的关键技术概念之一。Android 平台在技术上的最大亮点,就是将mash-up 技术引入了手机操作系统。实际上以现有成熟构件为基础,通过组合方式快速构造和开发新应用,这样的想法并非Android 首创,在Windows系统中的COM技术就是这种思想的体现。

Android之父曾经特别强调过:Android吸收了从COM构件体系到Web 2.0等技术体系的思想精髓,实现了多处技术创新,其中尤以应用程序级别的mash-up为最令他自豪的特性。

你可能感兴趣的:(Activity)