MIDlet 生命週期是 J2ME 開發核心概念,但文檔描述較抽象。本文提供可直接執行的驗證程式,在模擟器中觀察各方法實際調用順序與時機。
// LifeCircleMIDlet.java
import javax.microedition.midlet.*;
public class LifeCircleMIDlet extends MIDlet {
public LifeCircleMIDlet() {
System.out.println("1. 建構子");
}
protected void startApp() {
System.out.println("2. startApp()");
}
protected void pauseApp() {
System.out.println("3. pauseApp()");
}
protected void destroyApp(boolean unconditional) {
System.out.println("4. destroyApp(unconditional=" + unconditional + ")");
}
}
1. 建構子
2. startApp()
4. destroyApp(unconditional=true)
1. 建構子
2. startApp()
3. pauseApp()
2. startApp() <-- 恢復時再次調用!
4. destroyApp(true)
模擟器選單 → 接收來電 / 接收簡訊 → 掛斷 → 恢復
1. 建構子
2. startApp()
3. pauseApp() <-- 系統強制暫停
2. startApp() <-- 事件結束自動恢復
4. destroyApp(true)
+----------+ startApp() +---------+
| Paused | ------------------> | Active |
+----------+ +---------+
^ | | ^
| | pauseApp() | | destroyApp(true)
| +--------------------------+ |
| (系統/用戶觸發) |
+----------------------------------+
destroyApp(false) (拒絕銷毀,回到 Paused)
| 方法 | 調用時機 | 注意事項 |
|---|---|---|
建構子 | MIDlet 類別實例化時 (每次啟動一次) | 不可執行耗時操作,僅初始化欄位 |
startApp() | 進入 Active 狀態:啟動、恢復暫停、系統事件結束 | 可能多次調用,必頂冪等;初始化 UI、啟動執行緒、恢復資源 |
pauseApp() | 進入 Paused 狀態:用戶暫停、來電、切換應用 | 釋放獨佔資源 (網路連線、錄音、GPS)、停止動畫執行緒 |
destroyApp(b) | 銷毀 MIDlet:用戶關閉、系統回收記憶體 | b=true:必須銷毀;b=false:可拋出 MIDletStateChangeException 拒絕 |
public class MyMIDlet extends MIDlet {
private Display display;
private MainScreen mainScreen;
private NetworkManager netMgr;
protected void startApp() {
if (display == null) {
display = Display.getDisplay(this);
mainScreen = new MainScreen(this);
netMgr = new NetworkManager();
}
display.setCurrent(mainScreen);
netMgr.connect(); // 重新連線
}
protected void pauseApp() {
netMgr.disconnect(); // 釋放網路
// 停止動畫、計時器等
}
protected void destroyApp(boolean unconditional) {
netMgr.shutdown();
mainScreen = null;
display = null;
}
}
System.out.printlnstartApp 判斷 if (display == null) 避免重複建立 UI親自跑一次 LifeCircleMIDlet,在模擟器操作「暫停/恢復/關閉/來電」,觀察控制台輸出順序,即能將抽象生命週期內化為直觀認知。牢記 startApp 可重複調用、pauseApp 釋放資源、destroyApp 區分強制/非強制 三大鐵律,是穩健 MIDlet 開發的基石。