MIDP(Mobile Information Device Profile,移动信息设备简表)位于CLDC基础之上,为开发者提供了应用程序模型、图形用户界面、数据持久性存储等功能,目前最新的版本是MIDP 2.0(JSR 118)。在介绍MIDP的主要内容之前,先浏览一下移动信息设备上的软件运行环境,从中你可以了解到CLDC和MIDP的关系,以及他们位于整个软件运行环境的位置,如图1-4所示。
从图1-4可以看出,整个软件环境由三部分组成:MIDP兼容的应用程序、OEM(原始设备制造商)应用程序和本地应用程序。位于图左侧的CLDC,MIDP和MIDP兼容的应用程序是我们关注的重点。OEM应用程序通常都使用了OEM自己提供的类,而这些类并非标准的,因此在不同OEM之间,这些应用程序不具备可移植性。如果想开发面向更多移动信息设备的应用程序,应该避免使用OEM类。本地应用程序一般由汇编语言或者C/C++语言开发,它们可以使用更为强大的接口来访问操作系统的资源和服务。
1.应用程序模型——MIDlet
MIDP引入了全新的应用程序模型——MIDlet。MIDlet是应用程序的主类,被应用程序管理软件(Application Management System,AMS)管理。多个MIDlet可以组成MIDlet套件,以Jar包的形式发布。与Jar文件一起发布的还有一个文本文件——Java应用程序描述符(Java Application Descriptor,JAD)。JAD文件的作用在于描述MIDlet套件的基本信息,AMS安装MIDlet套件的时候可以首先解析JAD文件的内容读取套件信息,比如,比较CLDC和MIDP的版本,看套件是否和目标设备的软件运行环境兼容。下面的代码框架描述了MIDlet的基本结构。
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloMIDlet extends MIDlet {
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
本书的第2章将详细地讲解MIDlet的生命周期、开发步骤及发布方式。
2.图形用户界面
MIDP作为J2ME平台的第一个简表引起了业界巨大的关注。原因在于它提供了图形用户界面,使开发者为目标设备开发应用程序成为现实。MIDP没有采用J2SE平台的AWT/Swing作为移动终端设备的用户界面组件,主要原因在于AWT/Swing需要的空间远远超出了移动终端设备的承受范围,同时移动终端设备的显示方式和用户交互方式也不适合AWT/Swing,毕竟AWT/Swing是针对桌面电脑设计的,而桌面电脑是使用鼠标和标准键盘与用户交互的。
MIDP提供了一套适合移动终端设备的标准用户界面组件。它们设计非常小巧,层次清楚,大大缩短了开发MIDP应用程序的周期。MIDP的用户组件和事件处理机制有高级和低级之分,一般类似于菜单列表这样的界面通常使用高级组件的List完成,与之对应的高级事件处理机制通过Command和CommandListener完成。需要对界面的像素进行控制的时候则需要使用低级组件Canvas来制作。使用高级组件有助于提高程序的运行效率和可移植性,但是会失去对界面的控制,降低界面的表现能力。图1-5 列举了使用CustomItem和List开发的MIDP应用程序界面,模拟器为WTK2.2自带的DefaultColorPhone。
图1-5 MIDP图形用户界面示例
第3章将详细地介绍MIDP的图形用户界面。
3.记录管理系统
记录管理系统(Record Management System,RMS)是MIDP的一个子系统。为开发者提供了数据持久性存储的解决方案,应用程序的数据可以在MIDlet多次调用之后依然保持不变,即使重新启动设备或者更换电池也不会造成数据丢失。MIDP 2.0还允许在不同MIDlet套件之间共享记录存储数据。如果开发者想在应用程序中提供游戏最高分记录、用户自动登录等功能,那么RMS是首选的解决方案。本书的第4章将详细介绍记录管理系统。
4.游戏开发包
MIDP 1.0最成功的应用领域就是游戏,但是对游戏开发的支持并不是很出色。因此MIDP 2.0引入了专门的游戏开发包javax.microedition.lcdui.game.*。游戏API针对动画增加了游戏专用的控制,采用框架实现对精灵、冲突检测、层和平铺层(tiled layers)的管理,减小了游戏开发的难度,缩短了开发周期。本书的第5章将详细介绍游戏开发。
5.音频子系统
MIDP1.0并没有提供对多媒体的支持,甚至是音频功能都没有。因此,诺基亚等厂商在自己的移动电话上实现了对多媒体的支持,如Nokia UI API可以支持音频播放。这样带来的负面影响就是API的分裂,降低了应用程序的可移植性。MIDP 2.0提供了一个音频子系统,它是MMAPI(Mobile Media API,JSR 135)的子集。音频子系统支持单音生成和8比特WAV文件的播放,填补了MIDP对多媒体支持的空白。
6.安全模型与Push注册
MIDP 2.0提出了安全模型的概念,这不同于CLDC的安全结构。应用程序访问敏感API将受到安全模型的限制,需要用户授权后才能进行下面的操作。MIDP 2.0还支持PUSH注册,因此激活MIDlet的方式不在局限于用户手动,还可以通过时钟或者入站连接自动激活MIDlet。本书的第7章将详细讲解MIDP安全模型和PUSH注册机制。