MIDP API简要介绍

 * 介绍

移动信息设备简表(MIDP)适合类似于蜂窝电话和寻呼机这样的设备。MIDP,就象KJava一样,同样也建立在CLDC之上。MID简表提供一种标准的运行时环境,允许在终端用户设备上动态地配置新的应用程序和服务。

在本章中,我们将详细地讨论MID定义的七个软件包。我们还将建立一个MIDP应用程序示例。

 

*UI设计注意事项

MIDP包括一个低级的UIAPI和一个高级的UIAPI。低级的API允许您完全访问一个设备的显示屏,也允许访问原始键和指针事件。然而,使用低级API时,没有可用的用户界面控件。应用程序必须精确地绘制出按钮和其它所有的控件。

相反,高级API提供简单的用户界面控件但不能直接访问原始的输入事件或显示屏。由于显示屏的尺寸和MIDP设备输入方法的差异,控件显得很抽象。MIDP的实现确定了绘制控件的方法,也确定了如何管理用户输入。

让我们在后面的章节里更进一步了解MIDP的软件包和类。

*MIDPAPI

MIDP包含四个核心CLDC软件包(java.lang、java.io、java.util和javax.microedition.io),另加下面的三个特定于MIDP的软件包:

·javax.microedition.lcdui

·javax.microedition.midlet

·javax.microedition.rms

我们将在本章的后面部分详细介绍特定于MIDP软件包。除了上面新的软件包之外,MIDP还向核心CLDC软件包添加了四个新类,如下所示。

·java.util.Timer--用于为后台线程中将来要执行的任务确定时间。

·java.util.TimerTask--被java.util.Timer类使用,用来为后台线程中稍后的执行定义任务。

·javax.microedition.io.HttpConnection--一个接口,为HTTP连接定义必要的方法和常量。

·java.lang.IllegalStateException--一个RuntimeException,指出在不合法或不合适的时间已经调用的一个方法。

*MIDlet介绍

MIDlet是一个Java类,它扩展了javax.microedition.midlet.MIDlet抽象类。实现startApp()、pauseApp()和destroyApp()方法,这些方法类似于J2SE的java.applet.Applet类中的start()、stop()和destroy()方法。

除了扩充javax.microedition.midlet.MIDlet的主MIDlet类之外,一个MIDP应用程序通常还包括其它一些类,这些类能随它们的资源一起被打包成为jar文件--称之为MIDlet套件。一个MIDlet套件中的不同MIDlet能共享jar文件的资源,尽管不同套件中的MIDlets不能直接相互作用。

MIDlet在应用程序生命周期中有三种可能的存在状态--运行状态、暂停状态、销毁状态。运行状态,正如其名称所暗示的,意味着MIDlet正在运行中。这种状态始于startApp方法被调用时。在暂停状态中,MIDlet持有的所有资源将被释放,但是它准备着再次被运行。调用notifyPaused方法时,MIDlet处于暂停状态。在销毁状态中,MIDlet已经永久地将其自身关闭,释放所有的资源,等待着废物清理程序的处理。它是通过notifyDestroyed方法来调用的。

在接下来的两页中,我们来看一个简单的HelloWorldMIDlet。

*HelloWorldMIDlet

与使用KJavaHelloWorld应用程序一样,这个MIDlet也会在MIDP设备的显示屏上显示"HelloWorld!"和Exit按钮,按下该按钮会终止应用程序。

HelloWorld.java文件以下面的代码行开始,这些代码行导入稍后会在HelloWorld类中使用的类:

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Display;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.Form;

由于HelloWorld类是一个MIDP应用程序,它扩展了MIDlet。它也实现CommandListener接口来处理事件:

publicclassHelloWorldextendsMIDletimplementsCommandListener

      下面的方法是一个缺省构造程序,它创建一个新表单,在上面初始化控件,然后显示出来: 
private Form form;
public HelloWorld() {
   // Create a new form on which to display our text
   form = new Form("Test App");
   // Add the text "Hello World!" to the form
   form.append("Hello World!");
   // Add a command button labeled "Exit"
   form.addCommand(new Command("Exit", Command.EXIT, 1));
   // Register this object as a commandListener
   form.setCommandListener(this);
}

      调用 startApp() 方法启动应用程序与小应用程序的启动方法很象。在 MIDle 的一次执行中它可能会被调用多次。如果 MIDlet 暂停,pauseApp() 将会被调用。要重新启动 MIDlet,需调用 startApp()。仅须执行一次的主初始化代码应该放置在构造程序中: 

public void startApp() {
   // Get a reference to the display, and show the form
   Display display = Display.getDisplay(this);
   display.setCurrent(form);
}

      pauseApp() 被调用使得 MIDlet 处于暂停状态。在此应用程序中,当进入暂停状态时,我们没执行任何操作;但是我们仍然需要在 MIDlet 中实现 pauseApp 方法,因为它是父 MIDlet 类中的抽象方法。

publicvoidpauseApp(){}

      destroyApp() 被调用,破坏了 MIDlet 并使其处于销毁状态。在此应用程序中,我们通过将引用设为 null,释放了对表单的引用。 
public void destroyApp(boolean unconditional) {
   form = null;
}

      commandAction() 方法是事件处理程序,被请求实现 CommandListener 接口。目前,它破坏了应用程序并通知应用程序管理软件 MIDlet 已经完成。 

public void commandAction(Command c, Displayable d) {
   // Destroy this MIDlet
   destroyApp(true);
   // Notify the application management software that this MIDlet
   // has entered the destroyed state
   notifyDestroyed();
}

    * MIDP 软件包

除标准CLDC软件包之外,MIDP还包含三个附加的软件包:

·javax.microedition.lcdui--定义用来控制UI的类。这个软件包既包含高级UI类(例如Form、Command、DateField和TextField等),又包含低级UI类(允许用低级方式控制UI)。

·javax.microedition.midlet--包含MIDP主类中的一个,MIDlet类,为MIDP应用程序提供访问关于其运行所在环境信息的权限。

      javax.microedition.rms -- 定义一个类的集合,这些类为 MIDlet 提供了永久存储并随后重新得到数据的机制。 

相关推荐