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

J2ME MIDlet 生命週期實測:簡單程式碼驗證 startApp/pauseApp/destroyApp 呼叫順序

     編輯:J2ME

MIDlet 生命週期是初學者最易混淆的概念。本文提供最小化測試程式碼,透過列印輸出直觀掌握四大方法被系統呼叫的時機與順序。

測試程式碼


// 檔名:LifeCycleMIDlet.java
import javax.microedition.midlet.*;

public class LifeCycleMIDlet extends MIDlet {

    public LifeCycleMIDlet() {
        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 + ")");
    }
}

WTK 模擬器操作與預期輸出

情境 1:正常啟動 → 關閉

  1. 啟動 MIDlet
  2. 選單 → Exit / 關閉視窗

1. 建構子
2. startApp()
4. destroyApp(unconditional=false)

情境 2:來電/訊息中斷 → 恢復

  1. 啟動 MIDlet
  2. 模擬器選單 MIDlet → Pause(模擬來電/掛起)
  3. 模擬器選單 MIDlet → Resume(恢復)
  4. 關閉 MIDlet

1. 建構子
2. startApp()
3. pauseApp()
2. startApp()      ← 恢復時再次呼叫
4. destroyApp(unconditional=false)

情境 3:系統強制終結(記憶體不足、電話優先)

  • 不保證呼叫 pauseApp()
  • 直接呼叫 destroyApp(true),unconditional=true 表示必須釋放資源、不可拒絕

關鍵觀念釐清

方法呼叫時機開發者職責
建構子MIDlet 類別實例化時(僅一次)初始化欄位、非 UI 資源
startApp()啟動、恢復、切換回前景顯示 UI (Display.setCurrent())、啟動執行緒、恢復資源
pauseApp()來電、訊息、使用者切換應用、鎖螢幕釋放獨佔資源(網路連線、錄音、GPS)、暫停執行緒、存儲狀態
destroyApp()使用者結束、系統強制回收釋放所有資源、關閉連線、儲存必要資料、notifyDestroyed()

常見錯誤與最佳實踐

  • ❌ 在建構子呼叫 Display.getDisplay(this).setCurrent(...) → UI 可能未就緒
    ✅ 放在 startApp()
  • ❌ pauseApp() 什麼都不做 → 佔用記憶體/網路導致系統殺掉進程
    ✅ 釋放非必要資源,設 display = null
  • ❌ destroyApp(false) 拋出例外或拒絕結束
    ✅ unconditional=true 時必須無條件結束;false 時可詢問使用者(如未存檔),但最終仍須配合系統
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved