3.1.3 基于Mashup的应用架构特征
基于Mashup的应用,其核心是组件,应用边界、进程边界和网络边界在Android中都变得模糊而且不那么重要了。在Android中,组件执行时的聚合单元是任务(Task)[1],每个任务都由若干个界面组件对象构成,这些组件可能来自不同的应用,运行在不同的进程中,它们彼此独立,就像黑盒子一样,无须关注具体调用者或被调用者的实现细节。
组件间的数据传输,都是通过消息、进程间的通信模型等序列化数据传输的方式来进行,而不是通过对象指针的直接传递,这就使得Android的应用天生具有了良好的跨进程特征。在实际的Android开发中,开发者通常不需要关注应用进程的问题,而只需要把精力放在组件的管理和控制上即可。
基于组件的设计,不仅使得应用具有跨进程性,而且还具有跨网络的特性。当调用方组件发起请求,希望第三方组件帮助提供所需的功能或数据时,能够响应该请求的,不仅可以是一个本地已安装应用的组件,还可以是符合该请求的Web页面,C/S和B/S的差别在Android上也变得模糊了。
实现从跨进程到跨网络的升级,有两处关键的设计。首先是内置浏览器的支持。Android中搭载了移动平台史上最彪悍的浏览器Chrome Lite[2],它不仅可以完美地支持当前的各种HTML、JS和CSS,还提供对HTML 5和CSS3的支持。浏览器应用中的界面组件,能够处理不同的Web请求,从而使得Web页面的展示能够并入Android的组件体系中。
而另一个关键点在于Android沿用了Web中的服务定位等标准。Web页面是通过URL进行定位的,通过MIME type对其类型进行描述。而在Android中,采取了同样的标准,这就使得每一个Web页面都可以归纳到Android的识别范围之内。
举一个示例,如图3-2所示,一个带有地图信息的链接,不仅可以通过浏览器请求Web服务来进行展示,而且还可以通过本地安装的Google地图之类应用的组件进行展示和处理。相比之下,Web服务的使用门槛更低,而本地服务能够提供更丰富的处理功能。用户可以根据需求,选择最适合的方式。
图 3-2 通过不同的组件展示同样的地图信息
基于Mashup的这种应用架构模式,可以将整个Android设备中安装的应用以及各种Web应用糅合在一起,以帮助用户更好地完成相关事务。对于开发者而言,这样不仅降低了开发成本,还提供了最好的用户体验,真可谓一举多得、互惠互利的应用模型。
[1]任务的详细介绍,请参见第6章。
[2]Chrome for Android已然成为4.0系统上的浏览器最佳选择。