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

MIDlet 程式結構完整解析:生命週期、CommandListener 與 J2SE 類比

     編輯:J2ME

標準 MIDlet 骨架

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

public class MyMIDlet extends MIDlet implements CommandListener {
    // 成員欄位
    private Display display;
    private Form mainForm;
    private Command cmdExit;

    public MyMIDlet() {
        // 僅執行一次的初始化:載入資源、建立 UI 元件
        display = Display.getDisplay(this);
        mainForm = new Form("主選單");
        cmdExit = new Command("離開", Command.EXIT, 1);
        mainForm.addCommand(cmdExit);
        mainForm.setCommandListener(this);
    }

    protected void startApp() {
        // MIDlet 進入 Active 狀態:顯示主畫面、恢復執行緒
        display.setCurrent(mainForm);
    }

    protected void pauseApp() {
        // 進入 Paused:釋放獨佔資源(音訊、網路連線)、暫停遊戲迴圈
    }

    protected void destroyApp(boolean unconditional) {
        // 銷毀:儲存設定、關閉 RMS、釋放所有資源
        // unconditional=true 表示必須銷毀,不可拋出 MIDletStateChangeException
    }

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

三大生命週期方法詳細說明

方法觸發時機典型處理
startApp()啟動、從 Paused 恢復、來電結束顯示 UI、啟動執行緒、恢復音訊
pauseApp()來電介入、切換應用、鎖定螢幕釋放資源、暫停遊戲、停止網路輪詢
destroyApp()使用者結束、系統回收記憶體存檔、關閉連線、清理靜態參考

建構子與例外處理

  • 建構子由 AMS 呼叫一次,僅做輕量初始化(不可阻塞)。
  • 建構子拋出未捕獲例外會導致 MIDlet 無法啟動,務必 try-catch 包裹所有受檢例外。

CommandListener 整合

實作 CommandListener 介面,將同一 MIDlet 作為所有 Displayable 的聽眾,透過 Command 物件辨識動作來源。大型專案可採用命令模式或狀態機分離事件處理邏輯。

與 J2SE 對比

J2SEMIDP差異
Application.main()MIDlet.startApp()AMS 控制生命週期,非 main 進入點
Applet.init/start/stop/destroyMIDlet 四狀態Applet 由瀏覽器管理,MIDlet 由 AMS 管理
Servlet.init/service/destroy同樣有初始化/服務/銷毀Servlet 多執行緒,MIDlet 單執行緒模型
視窗/FrameDisplay/Displayable無視窗疊加,單一全螢幕

最佳實踐清單

  1. 建構子只初始化 UI 元件,不啟動執行緒。
  2. startApp 內判斷是否已初始化,避免重複建立資源。
  3. pauseApp 必須釋放獨佔資源(Player、HttpConnection、RecordStore)。
  4. destroyApp(true) 絕不拋例外,確保乾淨退出。
  5. 使用 notifyDestroyed() 主動通知 AMS 結束。

結語

掌握 MIDlet 生命週期與事件模型,能編寫穩健、符合平台規範的行動應用,避免常見的資源洩漏與狀態混亂問題。

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