Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1531849
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 20:34:07

一起学习
第九章:MIDP API
  • 介绍
    移动信息设备简表 (MIDP) 适合类似于蜂窝电话和寻呼机这样的设备。MIDP,就象 KJava 一样,同样也建立在 CLDC 之上。MID 简表提供一种标准的运行时环境,允许在终端用户设备上动态地配置新的应用程序和服务。
    在本章中,我们将详细地讨论 MID 定义的七个软件包。我们还将建立一个 MIDP 应用程序示例。

 

  • UI 设计注意事项
    MIDP 包括一个低级的 UI API 和一个高级的 UI API。低级的 API 允许您完全访问一个设备的显示屏,也允许访问原始键和指针事件。然而,使用低级 API 时, 没有可用的用户界面控件。应用程序必须精确地绘制出按钮和其它所有的控件。
    相反,高级 API 提供简单的用户界面控件但不能直接访问原始的输入事件或显示屏。由于显示屏的尺寸和 MIDP 设备输入方法的差异,控件显得很抽象。MIDP 的实现确定了绘制控件的方法,也确定了如何管理用户输入。
    让我们在后面的章节里更进一步了解 MIDP 的软件包和类。

 

  • MIDP API
    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 方法来调用的。
    在接下来的两页中,我们来看一个简单的 HelloWorld MIDlet。

 

  • HelloWorld MIDlet
    与使用 KJava HelloWorld 应用程序一样,这个 MIDlet 也会在 MIDP 设备的显示屏上显示 "Hello World!" 和 Exit 按钮,按下该按钮会终止应用程序。
    HelloWorld.java 文件以下面的代码行开始,这些代码行导入稍后会在 HelloWorld 类中使用的类:

    import javax.microedition.midlet.MIDlet;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Display;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.lcdui.Form;
    由于 HelloWorld 类是一个 MIDP 应用程序,它扩展了 MIDlet。它也实现 CommandListener 接口来处理事件:

    public class HelloWorld extends MIDlet implements CommandListener
    下面的方法是一个缺省构造程序,它创建一个新表单,在上面初始化控件,然后显示出来:

    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 类中的抽象方法。
    public void pauseApp() { }
    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 提供了永久存储并随后重新得到数据的机制。
下载本文示例代码


(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API(9)MIDP API
阅读(119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~