第九章:MIDP API

第九章: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 提供了永久存儲並隨後重新得到數據的機制。 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章