首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

深入理解 MIDP 基礎篇:MIDP 類庫架構、MIDlet 生命週期狀態機與 HelloWorld 實戰

     編輯:J2ME

MID 裝置特性約束

  • 顯示:最小 96×54、1-bit 單色
  • 輸入:ITU-T 手機鍵盤 / QWERTY 全鍵盤 / 觸控
  • 記憶體:128 KB MIDP 元件 + 8 KB RMS + 32 KB Java 執行期
  • 網路:雙向、無線、間歇、受限頻寬
  • 核心:至少支援 KVM
  • 軟體:非揮發性記憶體讀寫、無線網路 API、可靠性至上 (通話不可中斷)

MIDP 四大核心包

  1. javax.microedition.rms:Record Management System (持久化)
  2. javax.microedition.midlet:MIDlet 框架與環境互動
  3. javax.microedition.io:網路 (GCF)
  4. javax.microedition.lcdui:UI (High-level / Low-level)

加上 java.lang、java.util 共六包構成開發基礎。

MIDlet 繼承體系

javax.microedition.midlet.MIDlet (abstract)
       ↑ extends
    MyMIDlet (concrete)

類似 Applet 模式,所有 MIDlet 必須繼承抽象 MIDlet 類。

HelloWorld 完整範例

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloWorld extends MIDlet implements CommandListener {
    private Command exitCmd;
    private TextBox tb;

    public HelloWorld() {
        exitCmd = new Command("Exit", Command.EXIT, 1);
        tb = new TextBox("Hello MIDlet", "Hello, World!", 15, 0);
        tb.addCommand(exitCmd);
        tb.setCommandListener(this);
    }

    protected void startApp() {
        Display.getDisplay(this).setCurrent(tb);
    }
    protected void pauseApp() {}
    protected void destroyApp(boolean u) {}

    public void commandAction(Command c, Displayable d) {
        if (c == exitCmd) {
            destroyApp(false);
            notifyDestroyed();
        }
    }
}

WTK 1.0.3 圖形化建置步驟

  1. KToolbar → New Project → Project Name: HelloWorld, MIDlet Class: HelloWorld
  2. Settings 採預設 → OK
  3. 將 HelloWorld.java 放入 apps/HelloWorld/src/
  4. Build → Run → 選擇裝置體驗

MIDlet 生命週期狀態機

new() → Paused --startApp()--> Active --pauseApp()--> Paused
                              ↑___________________________|
                              destroyApp() → Destroyed
  • Paused:AMS 建立實例後初始狀態;構造器在此執行,適合一次性初始化。
  • Active:startApp() 被調用,取得顯示焦點,可重複進入 (如來電結束返回)。
  • Destroyed:destroyApp() 成功返回,資源釋放,不可逆。

開發者可請求狀態變更:resumeRequest()、notifyPaused()、notifyDestroyed()。

狀態轉換範例:FlowMIDlet

public class FlowMIDlet extends MIDlet {
    public void startApp() { System.out.println("startApp"); pauseApp(); }
    public void pauseApp() { System.out.println("pauseApp"); destroyApp(true); }
    public void destroyApp(boolean u) { System.out.println("destroyApp"); }
}

輸出順序:startApp → pauseApp → destroyApp,驗證狀態機流向。

MIDlet Suite 打包結構

MIDlet Suite (.jar)
├── MIDlet-1 (class)
├── MIDlet-2 (class)
├── Manifest.mf (屬性清單)
└── resources (圖片/文字/資料)
+
Descriptor (.jad) 純文字屬性檔

JAD 部署描述,JAR 實際載荷;兩者屬性 (Name/Version/Vendor) 必須一致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved