深入了解MIDP:移动应用开发的关键技术
立即解锁
发布时间: 2025-08-17 01:03:16 阅读量: 1 订阅数: 3 

### 深入了解MIDP:移动应用开发的关键技术
在移动应用开发领域,MIDP(Mobile Information Device Profile)是一项至关重要的技术,它为移动设备如手机、双向寻呼机等提供了专门的应用开发支持。本文将深入探讨MIDP的各个方面,包括其参考实现、MIDlets的概念、状态,以及相关的API和用户界面组件。
#### 1. MIDP参考实现
Sun提供的MIDP参考实现是开发MIDP应用的基础。该实现以一个名为`j2me_midp - 1_0 - ea1 - win.zip`的压缩文件形式提供,可从Sun的网站免费下载。下载并拥有该文件后,就可以开始使用MIDP进行编程。不过,为了进行测试,最好同时拥有J2ME Wireless Toolkit。
Sun提供的MIDP版本包含以下内容:
- **MIDP API**:以`midp.jar`的形式存在于`midp - ea1\lib`目录中。
- **设备模拟器**:通过执行`midp - ea1\bin`目录下的`midp.exe`文件来运行,可用于测试手机和寻呼机应用。
- **预验证工具**:位于`midp - ea1\bin`目录。
- **完整文档**:在`midp - ea1\docs`目录中,HTML文档包含MIDP和CLDC相关内容。要解压javadoc文件,需解压文档包`J2ME_MIDP + CLDC - 1_0 - EA1 - DOCS - *.zip`。
- **示例MIDlets**:包括游戏(如Sokoban、Puzzle tiles、ManyBalls)、实用工具(如Color chooser、Property inspector、Graphics sampler、HttpTest)和应用程序(如Auction demo、Stock tracker),以`examples.jar`的形式存在于`midp - ea1\lib`目录,其源代码在`midp - ea1\src\example`目录。
- **Makefile**:包含可启动演示程序或用于构建和运行自己应用的目标。
#### 2. MIDlets和MIDlet状态
MIDP采用基于MIDlets的应用模型,与CLDC的应用模型不同。在CLDC中,可使用`main()`方法创建应用,或使用KJava模型,但这两种方法都存在一定问题。而MIDP的MIDlets类似于applets,每个MIDP应用都是一个MIDlet,且都继承自`javax.microedition.midlet.MIDlet`类,并必须实现`startApp`、`pauseApp`和`destroyApp`方法,以便应用管理软件管理MIDlet的生命周期。
MIDlet在其生命周期中可能处于以下状态:
| 状态 | 描述 |
| --- | --- |
| Loaded | 使用`new`关键字创建MIDlet时进入该状态,每个MIDlet实例此状态仅出现一次。若出现异常,MIDlet将被销毁。 |
| Paused | MIDlet初始化完成但不持有共享资源时的状态。 |
| Active | 初始化完成并正常运行的状态,在Paused状态之后进入。 |
| Destroyed | MIDlet被销毁并释放所有资源的状态。 |
#### 3. MIDlet套件
MIDlets可以像J2SE类一样打包成一个JAR文件,这个JAR文件称为MIDlet套件。当MIDlets需要共享代码或数据时,会创建MIDlet套件。套件中的MIDlets可以共享JAR文件中的资源,不同套件中的MIDlets不能直接交互,这为MIDlet套件提供了安全保障。
MIDlet套件的名称、版本和创建者等信息通过清单文件中的条目来标识,这些条目还描述了运行套件所需的最低配置和配置文件版本。以下是MIDlet清单属性:
| 属性 | 描述 | 是否必需 |
| --- | --- | --- |
| MicroEdition - Configuration | 运行MIDlet套件所需的J2ME配置的名称和版本。 | 可选 |
| MicroEdition - Profile | 运行MIDlet套件所需的J2ME配置文件的名称和版本。 | 必需 |
| MIDlets | 套件中每个MIDlet的名称、图标和主类。 | 必需 |
| MIDlet - Data - Size | MIDlet运行所需的持久存储的最小字节数,默认值为零。 | 可选 |
| MIDlet - Description | MIDlet套件的描述。 | 可选 |
| MIDlet - Icon | JAR文件中PNG文件的路径,用于应用管理软件识别MIDlet套件。 | 可选 |
| MIDlet - Info - URL | 详细描述MIDlet套件的URL。 | 可选 |
| MIDlet - Name | MIDlet套件的名称。 | 必需 |
| MIDlet - Vendor | 套件的供应商。 | 必需 |
| MIDlet - Version | 套件的版本号,格式为XX.YY或XX.YY.ZZ。 | 必需 |
#### 4. MIDP API
MIDP API由以下包组成:
- **核心包(java.io, java.lang, java.util)**:是CLDC和MIDP的基础,与CLDC中的核心包相同,用于定义CLDC和MIDP中使用的Java语言,提供输入/输出方式和编写应用的一些实用工具。
- **javax.microedition.lcdui**:为手机等移动信息设备提供用户界面API。
- **javax.microedition.rms**:为MIDlets提供持久存储数据并在以后检索的机制。
- **javax.microedition.midlet**:定义移动信息设备配置文件应用程序以及应用程序与其运行环境之间的交互。
- **javax.microedition.io**:基于Connected Limited Device Configuration的通用连接框架提供网络支持。
其中,`java.util`包在MIDP中有两个CLDC中没有的类:`Timer`和`TimerTask`。`Timer`表示可以安排一次性或重复执行的任务,`TimerTask`为线程提供在后台线程中安排未来执行任务的功能。
#### 5. 应用生命周期包
`javax.microedition.midlet`包对于MIDP就像Applet包对于标准版本一样重要。它主要用于定义MIDP应用程序的组织方式以及与环境的交互方式,该包只有一个类`MIDlet`。
每个MIDP应用都必须继承`MIDlet`类,以便应用管理软件控制应用。除了继承的方法外,该类还有以下方法:
- `startApp`
- `pauseApp`
- `destroyApp`
- `notifyDestroyed`
- `notifyPaused`
- `getAppProperty`
- `resumeRequest`
以下是一个简单的MIDP应用骨架代码示例:
```java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
* Skeleton Application illustrating the use of MIDlet Class..
*/
public class first extends MIDlet implements CommandListener {
private Command quit; // The Quit button
private Display ourDisplay; // Declaring the display
// Initialize the Display and place system controls in the Constructor..
public first() {
ourDisplay = Display.getDisplay(this);
quit = new Command("Quit", Command.SCREEN, 2);
}
/**
* Initialize all the classes to be used in the program here (startApp())..
*/
public void startApp() {
//...
}
// If the Application needs to be paused temporarily.
public void pauseApp() {
//...
}
// Clean up when the application is destroyed..
public void destroyApp(boolean unconditional) {
//...
}
// Event handling routine..
public void commandAction(Command c, Displayable s) {
if (c == quit) {
// If Quit button is pressed..
notifyDestroyed(); // Call the destroyApp method..
}
}
}
```
#### 6. 用户界面包
与CLDC API不同,MIDP有自己的G
0
0
复制全文
相关推荐









