如上所述,Android采用了一种综合、专注而又重点突出的方法,将自身打造成为超越基于JVM的简单解决方案的移动平台。Android平台通过一个包提供了所需的一切:操作系统、设备驱动程序、核心库、JNI、优化的Dalvik VM以及Java开发环境。可以保证开发人员在开发新应用程序时,所有关键库都可在设备上使用。
这种综合方法不同于Java ME等其他移动平台。在比较这两种平台之前,首先简单概述一下Java ME。图1-4展示了各种计算配置的Java可用性。Java SE适合于桌面和工作站配置。Java EE(Java Platform, Enterprise Edition)专为服务器配置而设计。
Java ME是一个针对小型设备进行精简设计的Java版本。有两种配置集可用于Java ME。第一种配置称为CDC(Connected Device Configuration,连接设备配置)。用于CDC的Java ME是一个精减的Java SE版本,包含较少的包,这些包中的类更少,甚至这些类中的字段和方法也更少。对于受到更多限制的设备和装置,Java定义了一个称为CLDC(Connected Limited Device Configuration,连接受限设备配置)的配置。图1-5比较了各种Java配置的可用API。
安装在基础CDC和CLDC API之上的任何可选包都被视为"配置文件",可以使用JSR(Java Specification Request,Java规范请求)流程进行标准化。每个已定义的配置文件都会为开发人员提供一组额外的API。
(点击查看大图)图1-4 Java计算配置 |
(点击查看大图)图1-5 Java API可用性 |
警告 CLDC和CDC都支持Java SE外部的一些Java API,它们的类可能不是以java.*命名空间开头的。因此,如果桌面上运行了一个Java程序,无法保证它能在仅支持微型版本的设备上运行。
CLDC Java平台由一个经过显著删减的专门JVM承载,这个JVM名为KVM(K Virtual Machine,K虚拟机),它能够在内存只有128K的设备上运行。(KVM中的K表示KB。)CLDC可以在MIDP(Mobile Information Device Profile,移动信息设备配置文件)2.0下运行更多API。此API包含javax.microedition.*下的许多包。重要的包包括MIDlet(简单应用程序)、一个名为LCDUI的UI包、游戏包和媒体包。
CDC配置API包括java.awt API、java.net API和更多安全性API,当然还包括CLDC配置API。CDC上可用的其他配置文件为程序员提供了javax.microedition.xlet API(Xlet表示CDC配置下的应用程序)。在CDC配置之上,可以找到大约10个可以运行的可选包,包括蓝牙、媒体API、OpenGL ES(OpenGL for Embedded Systems)、JAXP(Java API for XML Processing)、JAXP-RPC、Java 2D、Swing、Java RMI(Java Remote Method Invocation,Java远程方法调用)、JDBC(Java Database Connectivity,Java数据库连接)以及Java API。总体而言,Java ME规范包含20多个JSR。据预测,JavaFX(http://javafx.com)也将会在Java移动应用领域发挥更大的作用。
说明 JavaFX是来自Sun公司的一种新用户界面框架,它显著改善了浏览器中类似小程序的功能。它提供了一种对设计人员更加友好的声明性UI编程模型。
在了解了Java ME的背景之后,让我们看看它与Android相比孰优孰劣。
多种设备配置:Java ME适用于两类微型设备,为每种设备提供了标准化但截然不同的解决方案。而Android仅适用于一种设备模型。它不会在低端设备上运行,除非这些设备的配置改进了。
易于理解:由于Android仅专注于一种设备模型,所以它比Java ME更易于理解。Java ME具有针对每种配置的多种UI模型,具体取决于设备所支持的功能:MIDlet、Xlet、AWT和Swing。每种Java ME规范的JSR更难以理解。它们经历更长的时间才成熟,找到针对它们的实现可能非常困难。
响应能力:在具有类似配置的设备上,与受支持的标准JVM相比,Dalvik VM性能更优且具有更高的响应能力。与Dalvik VM相比,KVM解决了具有更少内存的较低级设备的问题。
Java兼容性:由于采用了Dalvik VM,所以Android运行.dex字节码,而不是Java字节码。只要将Java编译为标准Java类文件,这就应该不是大问题。只是不能在运行时解释Java字节码。
采用率:Java ME在移动设备上得到了广泛的支持,因为大部分移动电话都支持它。但对于Java开发人员而言,Android的统一性、低成本和易于开发的特性是开发Android应用程序不错的理由。
Java SE支持:与CDC中对Java SE的支持相比,Android对Java SE的支持更加完善,但AWT和Swing除外。前面已经提到,Android拥有自己的UI设计方法。实际上,Android的声明性UI类似于更高级的UI平台,比如Microsoft Silverlight和Sun公司的Java FX。