3.1介绍
在这一章中,我们将复习一下在为小型设备开发应用程序时需要牢记的一些注意事项。我们将看一下在使用 J2SE 编译 J2ME 应用程序时调用编译器的方法。最后我们将探究打包和部署,以及在这个过程中提前验证所扮演的角色。
3.2 设计开发小型设备应用程序要注意的事项
为小型设备开发应用程序,需要您在设计阶段制定某种策略。最好是在开始编写代码之前,战略性地为小型设备设计应用程序。由于无法考虑到所有的 "Gotchas" ,在开发应用程序之前更正代码是一件很痛苦的工作。
下面是一些可以考虑的设计策略:
· 保持程序简单。除去不必要的功能,如果可能的话,将它们做成独立的、次要的应用程序。
· 程序越小越好。这一点对所有的开发者来说应该是显而易见的。越小的程序占用的设备内存越少,并且花费的安装时间越少。可考虑将您的 Java 应用程序打包,作为压缩的 Java 档案 (jar) 文件。
· 运行时占用最少的内存。为尽可能减少运行时占用的内存,使用标量类型代替对象类型。同时,不依赖垃圾收集程序。您应该在使用完对象时将对象引用置空,这样可有效管理内存。另外一种减少运行时所需内存的方法是使用“惰性”实例,它仅在必需时才分配对象。其它一些减少小型设备上过量和峰值内存使用的方法有快速释放资源、重新使用对象以及避免异常。
3.3 设计开发移动设备应用程序的注意事项
开发移动设备应用程序的规则与我们前面提及的开发小型设备的相同:先设计再编码。让我们检查一下开发移动设备应用程序时可考虑的一些设计建议:
· 让服务器做大部分的工作。将计算性较强的任务放到服务器上,让服务器为您做这些工作。让移动设备处理界面和最少的计算工作,而让服务器做繁重的工作。当然,您为其开发应用程序的移动设备对设备连接到服务器上的难易程度和频率有重要影响。
· 谨慎地选择编程语言。J2ME 仍然处于成长期,可能还不是最好的选择。根据您的需要,选择其它的面向对象语言,如 C++,可能会更好。
3.4 性能注意事项
为性能而编码。下面有一些以获得最优性能为目标的编码方法:
· 使用局部变量。访问局部变量比访问类成员更快。
· 避免字符串串联。字符串串联不仅会降低性能,而且会增加应用程序的内存峰值占用量。
· 使用线程,避免同步。任何运行时间超过 1/10 秒的操作都需要一个独立的线程。避免同步同样能提高性能。
· 使用模型视图控制器 (MVC) 分离模型。MVC 将代码中控制显示的逻辑分离出来。
3.5 编译注意事项
同其它的 Java 应用程序一样,您在打包和部署应用程序之前要先进行编译。尽管有了 J2ME,您仍然使用 J2SE 编译器并且需要用适当的选项来进行调用。
特别的,您需要使用 -bootclasspath 选项来指示编译器使用 J2ME 类,而不是 J2SE 类。不要在编译器的 CLASSPATH 中设置配置类。这样将导致运行时错误,因为不管 CLASSPATH 中有什么,编译器将首先自动搜索 J2SE 的核心类。换句话说,编译器将无法引用特定 J2ME 配置中缺少的类或方法,结果导致在尝试运行应用程序时出现运行时错误。
3.6 打包和部署注意事项
由于 J2ME 是为内存有限的小型设备设计的。大部分常用的 Java 提前验证已经从虚拟机中除去以形成一个较小的覆盖区域。结果,在配置之前提前验证 J2ME 应用程序就很有必要。在运行时会附加一个检查以确保这个类在提前验证之后还没有改变过。
如何严格执行提前验证或者检查类的正确性依靠的是工具包。CLDC 提供一个称为提前验证的命令行实用程序,它能够进行实际的验证并且可以把一些额外的信息插入到类文件中去。MIDP 使用无线工具包,这种工具包提供一种 GUI 工具,也可从命令行运行这种工具。
部署工作取决于您要部署的平台。应用程序必须以一种适合 J2ME 设备类型的格式进行打包和配置,就如简表定义的那样。
4 J2ME配置
4.1 J2ME 配置是什么?
正如前面所学,配置将基本运行时环境定义为一套核心类和一个运行在特定类型设备上的特定的 JVM。您也可以学到 J2ME 的两种配置类型是 CLDC 和 CDC。
Sun 提供的 J2ME 配置是适合不同层次的市场需求的 -- CLDC 适合小型设备,而 CDC 适合大型设备。J2ME 环境可以被动态地配置为提供运行应用程序所需要的环境,而不用考虑是否为设备提供了运行该应用程序所需的所有 Java 技术库。核心平台接收应用程序代码和库。运行在网络上的服务器软件执行配置工作。
在下面的几页中,您将学到关于 CLDC 和 CDC 的更多知识以及与它们关联的简表。
4.2连接限制设备配置 (CLDC)
CLDC 是由 Java Community Process 创建的。正如 Sun Microsystems 的 Web 站点所定义的那样,它的标准是:“轻便、覆盖区域最小的 Java 构建块,适合小型的、有资源限制的设备。”
J2ME CLDC 配置是为将在业界定义的简表中使用的一个虚拟机和一套核心库准备的。正如第 2 章中提及的,一个简表通过在基本 J2ME 配置顶部提供特定于域的类来为特定的设备定义应用程序。K 虚拟机 (KVM)、虚拟机的 CLDC 的参考执行和它的 KJava 简表运行在 CLDC 的顶部。
CLDC 简要描述了高度限制设备上每个 J2ME 执行所要求的一套最基本的库和 Java 虚拟机特征。CLDC 主要面向那些网络连接速度慢、能源有限(经常是电池供电)、具有大于等于 128 KB 的稳定内存、以及大于等于 32 KB 的不稳定内存的设备。不稳定内存是不持久的并且没有写保护,这意味着如果关掉设备,内存中的内容将全部丢失。而稳定内存中的内容是持久的,并且有写保护。CLDC 设备使用稳定内存来存储运行时的库和 KVM,或存储为某个特殊设备创建的另一个虚拟机。不稳定内存被用来分配运行时的内存。
4.3 CLDC 要求
CLDC 定义了下列要求:
· 完整的 Java 语言支持(除浮点支持、最终定案和错误处理之外)
· 完整的 JVM 支持
· CLDC 的安全性
· 有限国际化的支持
· 继承类 -- 所有不针对 CLDC 的类都必须是 J2SE 1.3 类的子类
· 针对 CLDC 的类都在名为 javax.microedition 的软件包和它的子包里
除 javax.microedition 软件包以外,CLDC API 还由 J2SE 的子集 java.io,java.lang 以及 java.util 等软件包组成。我们将在 CLDC API 这一章中学习有关的细节问题,然后使用 CLDC API 来开发我们的绘图应用程序。
4.4 连接设备配置 (CDC)
连接设备结构 (CDC) 被定义为一种添加了 CLDC 类的 Java 2 标准版 (J2SE) 的简化版。因此,CDC 是建立在 CLDC 的基础之上,并且为 CLDC 设备开发的应用程序也可以运行在 CDC 设备上。
CDC 也是由 Java Community Process 开发的,它为用户的电子设备和嵌入式设备如智能电话、双向寻呼机、PDA、家用电器、销售网络终端以及汽车导航系统等提供一种标准化的、轻便的、功能齐全的 Java 2 虚拟机构建块。这些设备运行 32 位的微处理器和超过 2 MB 的内存,这些对于存储 C 虚拟机和库是必需的。K 虚拟机支持 CLDC,而 C 虚拟机 (CVM) 支持 CDC。CDC 与基础表相关联,这一点不在本教程的范围之内。
4.5 CLDC 与 CDC 的比较
面这幅图描述了 CDC 和 CLDC 之间的关系。同时该图也揭示了它们与整个 J2SE API 系。正如前面所说,CDC 是加上一些额外类的 J2SE 的子集。我们也可以看到 CLDC 是 CDC 的子集。