1 2 下一页
即使你是一名经验丰富的
J2SE/
J2EE开发人员,如果你想成为一名好的移动
Java开发人员,你就必须理解移动设备、无线
网络和移动用户各自的特性。本文解释了移动应用程序开发中面临的一些挑战,以及如何克服这些困难。
J2ME允许桌面或企业Java开发者把自己已有的经验技巧迁移到为企业和顾客建立智能移动应用程序上面。这些技巧包括Java语言的基本概念、API和公共
设计模式。但是,从桌面、
服务器或瘦客户端领域盲目地进行“技巧迁移”带来的缺陷可能比优点还要多。例如,大多数运行在PersonalJava和J2ME个人环境(Personal Profile)上的基于AWT的J2SE应用程序不经过修改,直接迁移到移动设备上常常导致难以接受的性能和很差的可用性。为了建立成功的智能移动应用程序,开发者必须理解移动设备和网络的具体特性。
作为Java开发者和架构人员,我们应该了解
移动开发的一些什么样内容?我们如何再次训练自己以适应新的事务?我们分析了移动应用程序开发中的主要挑战,并讨论了克服这些困难的最佳经验。
有限的设备硬件 移动平台和PC平台之间最明显的差异是用于处理的硬件。比起任何移动处理设备,目前的PC都拥有更快的
CPU、更快的
内存和更多的存储空间。桌面和服务器开发者可以负担编写“浮肿的”的应用程序(例如微软
Office)的大量开销,他们还能够访问大型的、集成了大量功能的框架组件(例如J2SE平台本身)提供的丰富的用于提高效率的特性。但是,在移动设备上就完全不同了。有时CPU速度还不到20MHz、内存小于100KB,我们必须仔细地评估自己所需要的特性,彻底地优化代码,在有限的框架组件支持下工作。在这一部分我们将讨论这些挑战。
1、轻量级的类库
初学者最普遍的错误是“golden hammer”反模式(anti-pattern):为事务选择了错误的技术。在Java的世界中,软件工具通常作为标准的或第三方类库中的可重复使用的对象存在。选择占用最少的硬件资源、支持必要的应用程序特性的最好的类库是我们工作的要点。
J2ME
基础和个人环境(也包括PersonalJava)在字节码(bytecode)层次与J2SE是兼容的,并且它继承了J2SE核心API的一个很大的子集。在理论上,我们可以把J2SE程序库(例如
XML处理、加密、消息处理和UI)直接用于移动设备上。但是,如果这样做就会降低J2ME的效果,导致缓慢的、浮肿的应用程序(它们只能部署在更昂贵的设备上)。在大多数情形中,我们应该选择为移动设备特别设计的轻量级的类库。通常多个有厂商在相同的市场上竞争,每个厂商提供一个稍微不同的轻量级产品,侧重于不同的特性。
CLDC和MIDP标准类库都是从下向上设计的轻量级组件。但是,遇到需要选择第三方类库的时候,选择正确工具的需求也适用于MIDP项目。对于特定的程序库,厂商为大量的MIDP设备(例如
Symbian OS设备)提供一个与J2SE兼容的API版本和另一个使用专用API的非常轻巧的版本。一般来说,后者占用的内存更少、性能更好,但是需要额外的训练并且程序的移植性也较差。MIDP轻量级类库的例子有PointBase MIDP关系
数据库API和iBus//Mobile JMS客户端API。
2、减少应用程序占用的空间
移动设备普遍只有很少的内存和存储空间,因此它要求我们同时优化应用程序的存储和运行时所占用的空间。下面是我们的一些建议:
· 优化程序打包(packaging)过程:尽管仔细地选择了最好的轻量级类库,但是我们仍然可以发现应用程序只使用了部分类库。在程序打包过程中,我们应该只包含实际使用的类。对于小型类库我们可以手动完成这种工作,对于大型类库可以使用与一些J2ME IDE(例如IBM
WebSphere Studio Device Developer)绑定在一起的自动化工具来完成。如果你希望进一步减少二进制应用程序的大小,你可以使用字节码错乱程序(obfuscator)把长变量名称和类名称更换为更短的、含意模糊的名称。
· 分割应用程序:由于MIDP运行时只载入需要的类,我们可以把应用程序分成独立的部分以减少运行时占用的空间。对于MIDP应用程序,MIDlet工具套件可以包含多个相对独立的MIDlet。
尽管标准的MIDP规范并不支持共享类库,但是一些特定厂商的实现达到了这个目标。其中一个例子是BlackBerry手持设备的BlackBerry Java开发环境(JDE)。共享类库进一步减小了总体占用的空间,因为不需要在每个应用程序中重复类库。
上一篇: 用J2ME在移动设备上实现动画
下一篇: 深入理解MIDP低层用户界面API
1 2 下一页