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

J2ME 程式設計最佳實踐:基於堆疊的螢幕導航框架設計

     編輯:Java 相關知識

非遊戲類 MIDP 應用常面對多 Screen/Canvas 切換需求。傳統 MVC 雖完整但過重:Controller 膨脹、所有 View 啟動時初始化佔記憶體、Model 過度設計。本文提出**基於堆疊的輕量導航模型**,僅保留核心靈活性,完美適合「前進/後退」規律的螢幕流程。

堆疊導航核心模型

  • 前進: 目標螢幕入堆疊 → 顯示
  • 後退: 當前螢幕出堆疊 → 取新堆疊頂螢幕 → 顯示
  • 特性: 每螢幕只需知「下一個是誰」,無需記住上一個;返回時上一螢幕狀態完整保留在堆疊中

ControllerMIDlet:單例控制器 + 堆疊管理

public class ControllerMIDlet extends MIDlet {
    private static ControllerMIDlet instance = null;
    private Display display = null;
    private Stack ui = new Stack();  // 螢幕堆疊

    public ControllerMIDlet() { instance = this; }

    protected void startApp() {}
    protected void pauseApp() {}
    protected void destroyApp(boolean unconditional) {}

    // 後退:彈出當前,顯示新堆疊頂
    public static void goBack() {
        instance.ui.pop();
        Object obj = instance.ui.peek();
        instance.display.setCurrent((Displayable) obj);
    }

    // 前進:推入新螢幕並顯示
    public static void forward(Displayable next) {
        instance.ui.push(next);
        instance.display.setCurrent(next);
    }
}

靜態 instance 讓任意處呼叫 ControllerMIDlet.forward()/goBack() 無需傳遞 MIDlet 參考。

四種實戰導航場景與擴展方法

場景 1:簡單前進/後退 (Help 螢幕)

主選單 → Help → 返回主選單。直接用 forward()/goBack()。

場景 2:暫態等待螢幕 (聯網載入圖片)

列表 → **載入中** → 圖片詳情。若用戶在詳情頁按「返回」,應回列表而非載入中頁。**解決:`replace()` 取代 `forward()`**

public static void replace(Displayable next) {
    instance.ui.pop();      // 移除載入中頁
    instance.ui.push(next); // 推入詳情頁
    instance.display.setCurrent(next);
}

堆疊變化:

場景 3:條件分支流程 (登入/自動登入)

選擇自動登入:

登入頁 → 自動登入處理 → 主選單 (登入頁隱藏不顯示)

不選自動登入:

登入頁 → 手動登入 → 主選單

解決:雙參數 `forward(d1, d2)` — 兩者都入堆疊,只顯示 d2

public static void forward(Displayable d1, Displayable d2) {
    instance.ui.push(d1);  // 登入頁入棧但不顯示
    instance.ui.push(d2);  // 主選單入棧並顯示
    instance.display.setCurrent(d2);
}

返回時:取消 → 回登入頁;確認 → 留主選單。完美支援條件分支。

模型優缺點分析

優點缺點
極簡輕量,無 Controller 膨脹問題資料由各螢幕分散處理,後續螢幕建構子參數可能越來越多
按需建立螢幕,啟動快、記憶體省複雜資料流需手動傳遞,無集中 Model 管理
返回時狀態完整保留 (堆疊特性)不支援任意跳轉 (非線性流程)
擴展方法靈活應對分支/替換場景全域靜態 instance 難以單元測試

進階整合:聯網非同步操作框架

文中預告後續將整合「多執行緒等待螢幕」完整方案,讓應用層完全不用處理聯網非同步邏輯,專注業務。核心思路:

  • 等待螢幕內建 Thread 執行網路任務
  • 完成後回呼 Controller `replace(resultScreen)` 替換等待頁
  • 失敗時回呼 `forward(errorScreen)` 或 `goBack()`

總結

堆疊導航模型以 **MIDlet 單例 + Stack** 為核心,配合 forward/goBack/replace/forward(d1,d2) 四大操作,以最小代價解決 90% MIDP 應用的螢幕導航需求。適合規律性前進/後退流程,資料傳遞複雜度較高時可考慮引入輕量 Context 物件在堆疊中傳遞。

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