标题：MIDP
简介
对于 Java ME 平台，MIDP 定义了一个标准的 Java API 集合，此集合与联网的受限设备配置 CLDC 一起提供了一个面向移动信息设备（如移动电话、双向寻呼机和无线个人电脑记事本）的完整 Java ME 应用程序运行环境。
功能
功能
·显示工具箱
·用户输入方法
·持久性数据存储（使用简单的面向记录的数据库模型）
·基于HTTP 1.1 的网络（使用 CLDC 通用连接框架）
MIDP 1.0
MIDP 1.0提供了以下功能：
·显示工具箱
·用户输入方法
·持久性数据存储（使用简单的面向记录的数据库模型）
·基于 HTTP 1.1 的网络（使用 CLDC 通用连接框架）
Java 规范请求 (Java Specification Request, JSR)-37 中定义了 MIDP 1.0 标准。
MIDP 2.0
JSR-118 中定义了 MIDP 2.0 标准。
MIDP 2.0 于 2002 年 11 月正式发布，MIDP 2.0 的推出在一定意义上增强了 Java ME 的功能，主要体现在如下几个方面。
（1）支持操作图像的像素，支持 Alpha 通道。
（2）增强型的图形用户界面类 CustomItem，提高了高级界面类的表现力。
（3）Media 音频子系统填补了 MIDP 1.0 不支持声音播放的空白。
（4）Push 注册机制和安全模型增强了对 MIDlet 的控制。
（5）游戏开发包提高了游戏开发的效率。
（6）联网能力增强，可以支持 TCP/IP 甚至是 UDP 层的通信。
MIDP 2.1
1、 一个TextField或一个TextBox的最小尺寸（存储容量）不能少于1000个字符。 
2、 LCDUI布局指令必须被遵循 。
3、 LayoutManager.insert()方法的行为必须依照以下的描述：insert(Layer,int)
描述
Public void insert(javax.microedition.lcdui.game.Layer l,int index)
插入一个新的Layer对象到LayoutManager在指定的索引值
描述：
插入一个已经被添加到这个LayoutManager的Layer对象等于先使用LayoutManager.remove()方法删除它，再用insert()方法添加到特定的索引。在LayoutManager.remove()方法被调用前，抛出IndexOutOfBoundsException的情况被检查
参数：
Layer l：被插入的Layer对象
int Index：在被添加的新的Layer对象的索引值 。
异常抛出：NullPointerException：如果Layer对象为null
IndexOutOfBoundsException：如果索引值小于0。如果索引值大于已经被添加到LayoutManager中的Layer对象的数量且Layer对象不能被添加到这个LayoutManager中。如果索引值大于已经被添加到LayoutManager中的Layer对象的数量且Layer对象已经被添加到这个LayoutManager中 
4、 一个带有item Command对象且表示模式是Item.PLAIN的StringTtem对象必须总是被作为添加了Command对象且表示模式是Item.HYPERLINK的StringTtem对象的方式显示。 
5、 许多的MIDP LUDUI图像组件能包含文本（换句话说，一个字母数字字符），那被显示给用户。这些组件的例子是List, TextBox , Alert , StringItem ,Form和Item。一个实现常常需要截断这些可见的文本因为不能适合被给的UI组件的指定空间。在这种情况下，一个实现必须使用一个适当的可视化指示（例如一个省略符号）来指示用户，文本被截断。实际的符号或被用来显示截断的文本的符号以来于当前设备选择的区域设置。然而，可视化指示应该和用在设备本地的UI的指示一致。 
6、 Canvas的触摸事件必须被支持，如果基础硬件支持这个特色。在这种情况下，Canvas.hasPointerEvents()方法应该总是返回true。 
7、 Canvas的触摸拖曳事件必须被支持，如果基础硬件支持这个特色。在这种情况下，Canvas.hasPointerEvents()方法应该总是返回true。 
8、 Canvas的重复事件必须被支持。在这种情况下，Canvas.hasRepeatEvents()方法应该总是返回true。 
9、 双缓冲图像必须被支持。在这种情况下，Canvas.isDoubleBuffered()方法应该总是返回true。 
10、 不同的文本输入模式的可用性（例如：预言输入和仅仅是数字的输入）应该和Java和本地的应用程序相一致。这意味着，例如，如果预言输入文本模式在本地应用程序中可用，那也应该在Java应用程序中可用。 
11、 Image对象的创建（不管格式）必须至少支持：尺寸等于（屏幕宽度）乘以（屏幕高度）乘以（以字节为单位的颜色深度）或262144比特（128×128×16比特=32KB），无论哪一个更大。注意，一个Image对象的内在表现应该保持至少每个象素16字节的颜色/透明度数据 
12、 每一个包括在字符串值的通过System.getProperty(“microedition.commports”)方法返回的串行端口名字必须可获取通过javax.microedition.io.CommConnection接口 
12、 在每个协议，AllowedSender域必须匹配适当的输入事件的地址域。地址域的使用和语法和语意以来于协议。然而，地址和过滤器必须被比较通过精确的字符串匹配，在那里，字符串被一个接着一个字符的比较，字符需要正确地匹配通过两个通配符 
13、 以下地网络通信协议必须被支持，提供了以下Java ME接口的实现：javax.microedition.io.SockerConnection , javax.microedition.io.SecureConnection, javax.microedition.io.HttpsConnection 
14、 javax.microedition.io.HttpsConnection和javax.microedition.io.SecureConnection必须支持SSLv3协议，其它的，例如TLS,WTLS也许被支持。 
15、 应用程序描述符应该包含MIDlet-Permissions 
16、 以下的JAD/manifest文件属性被定义来支持指定预期的运行时执行环境：Runtime-Execution-Environment：这是一个可选的属性，指出了应用程序必须的运行时执行环境。这个属性也许有值MIDP.CLDC.如果MIDlet suite不指定属性，隐含的默认值是MIDP.CLDC。当值是MIDP.CLDC，实现的行为必须坚持在以下显示的更多的细节描述。这个属性值的附加值被在将来定义。手机实现必须支持这个属性。当值是MIDP.CLDC，实现的行为必须坚持以下要求：1、支持API和API行为，以及基础虚拟机，必须顺从CLDC1.1规范。2、手机实现也许二选一地使用Java ME的CDC规范。然而，如果CDC被用作基础配置，运行在这个平台顶端的应用程序必须看见一个语义学和功能上等于CLDC1.1平台的环境。CDC特定的API或者CDC特定行为必须不能被暴露给应用程序或应用程序开发者。3、当一个应用程序定义了Runtime-Execution-Environment属性值，应用程序必须也定义一个CLDC平台在MicroEdition-Configuration属性值中。4、如果一个应用程序定义了不被实现支持的Runtime-Execution-Environment属性值或MicroEdition-Configuration属性值，应用程序不能被安装。所有的手机实现必须支持MIDP.CLDC值对于Runtime-Execution-Environment属性。 
17、 用户使用OTA下载安装之后，实现必须提示用户是否启动MIDlet 
18、 实现必须允许MIDlet创建最小为10个的线程
19、 支持至少512个属性 
20、 支持MIDlet suite包含1到5个MIDlet 
21、 每个MIDlet suite的RMS至少保证64K的空间，在内存足够的情况下 
22、 每个MIDlet suite至少可以创建10个独立记录存储 
23、 MIDP的MMAPI的子集必须遵守MMAPI1.1或以后版本 
24、 MicroEdition.profiles系统属性不能包含相同profile的不同的版本 
25、 Image对象中ISO/IEC JPEG和JFIF被支持 
26、 支持载入深度为1、2、4、8、16和32位的PNG格式 
27、 TextBox和TextField的约束TextField.EMAILDDR和TextField.URL必须允许相同的字符被输入如同被允许输入在TextField.ANY约束下 
28、 适合的设备必须实现基于时间的推注册，如果没有其它的安全机制基于时间的推注册不需要被显式的用户的许可
MIDP的高级事件处理机制
MIDP[1]的事件处理处理机制同样是采用回调的机制，可以参考AWT的事件处理原理。在MIDP中分高级事件处理和低级事件处理，前者主要是针对高级UI，而后者主要是这对Canvas这样的低级UI的。首先介绍的是Command类，移动信息设备的输入主要来自于手机的键盘，导航则主要是由按钮来完成的，例如软键和导航键。Command类包装了动作的信息，但是并没有包括动作触发后应该做什么，这些是在CommanListener内实现的。Command的构造器：
Command command = new Command("退出",Command.EXIT,1),构造器的参数分别表示按钮的标签，按钮的类型和优先级别。移动信息设备是根据后面两个参数对按钮进行布局的。
高级事件处理主要由两个接口来实现，一个是CommandListener,一个是ItemStateListener。在CommandListener中定义了方法commandAction(Command cmd,Displayable disp),必须实现这个方法来完成事件处理，告诉应用程序当在disp界面下如果cmd按钮并按下的时候他应该去做什么。ItemStateListener中定义了方法itemStateChanged(Item item)，应用程序通过他来得到在Form内的item内部状态发生变化的事件。用户在进行如下操作的时候都会触发这样的事件，调整交互性Guage、在TextField内输入或者修改内容、修改DateField、改变ChoiceGroup的状态。