本文内容摘自即将出版的《Symbian OS J2ME编程指南》一书,关于本书的具体介绍请访问:http://www.china-pub.com/computers/common/info.ASP?id=25538
6.1 概述
在本章和下一章,我们将讨论如何使应用程序尽可能地可移植,以及如何编写高效的代码。尽管Java(尤其是无线Java)并非“编写一次,到处运行”,将Java MIDlet移植到不同的无线设备上通常还是比较简单的。和移植相关的问题源于手机的多样性:不同的堆内存、不同的持久化存储、不同的屏幕尺寸,以及不同的用户输入方式都使得一个应用程序在一系列设备上以一致的行为运行的难度大大增加。一些设备还有可选的API包,还要为每一个操作考虑到网络问题,如答应的JAR文件尺寸。
这一章将研究如何开发能在尽可能多的手机上移植的MIDlet。我们将讨论如何使用设计模式和代码编写准则来帮助移植,使开发者能从自己的努力中获得最大的可重用性。
创建可移植代码的价值被市场上一系列Java设备扩大化了。它们中的许多都是相似的;例如,Series 60平台为一系列设备提供了一个创建应用程序的方式。甚至在Series 60设备中,开发环境也是有不同的。一些手机包括Wireless Messaging API(JSR 120)和Java蓝牙API(JSR 82)。新出的Series 60设备,如Nokia 6600,支持MIDP 2.0,早期的设备如Nokia 3650,仅支持MIDP 1.0。Symbian系统设备也有不同的用户界面。它们不同大小的屏幕,更显著的是用户输入方式的不同:Sony EriCsson P900使用一个非常大的触摸屏和一个小的操纵杆,而通常Series 60手机都有较小的屏幕并使用键盘和一个方向操纵杆。
然而,这些不同点并不意味着:一个应用程序不得不完全重写以便运行在所有的设备上。不管我们的应用程序使用等Form、TextField和List高级组件,还是使用Canvas自己绘制和处理事件(或者同时使用这些技术),我们仍然能够做许多工作使得我们的MIDlet可移植。
最后,核心应用程序应当在不同设备上均保持不变,任何不同都应该是由于不同的用户界面引起。例如,图形操作可能由于较小的屏幕而改变,或者根据不同的用户输入而创建不同的菜单。确保核心应用程序保持不变需要将其从UI中分离,这需要基于一个恰当的模式。
开发者除了要创建一个可移植的架构,还要满足不同设备的性能。这需要知道设备支持哪些API并相应更改MIDlet。
当讨论编程模型时,我们还将讨论Symbian系统设备的不同之处,并看到这将影响到应用程序的实现。
6.2 设计模式
已经有许多类型的结构设计可以在面向对象的编程语言如Java中采用,这有助于代码的可移植性。虽然我们不打算讨论设计理论的细节,通常在MIDlet开发中考虑重要的概念还是值得的。传统上,这些设计都是与桌面应用程序或基于服务器的应用程序开发关联的;然而,由于内存和处理器能力的约束对无线应用程序越来越小,这些模式变得愈加重要。下面的章节将介绍两种有用的设计模式。
6.2.1 模型-视图-控制器设计模式