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

J2ME 最佳實踐 (一):概述與記憶體/包體積優化

     編輯:J2ME

J2ME 最佳實踐系列 (一):跨裝置相容與資源優化核心原則

MIDP 1.0/2.0 應用程式面臨 CPU 弱、記憶體少 (幾十 KB~幾百 KB)、螢幕小、JAR 大小限制等挑戰。本文闡述核心設計模式:自動適應裝置配置、避免 OOM、減少圖片縮減 JAR 體積。

核心挑戰

  • 記憶體極限:低端機僅 50KB 可用堆疊。
  • JAR 大小限制:許多手機拒絕安裝超大 JAR (如 > 64KB/100KB/300KB)。
  • CPU 效能:無 JIT,運算速度慢。

1. 避免 OutOfMemoryError (OOM)

分配大記憶體前 (如下載圖片、建立大陣列) 必須預檢可用記憶體:

// 範例:下載圖片前預檢
System.gc(); // 建議先觸發 GC
int maxSize = 102400; // 100KB 目標分配
int freeMem = (int) Runtime.getRuntime().freeMemory();

if (maxSize > freeMem * 2 / 3) {
    // 記憶體不足,顯示 Alert 提示使用者,不嘗試分配
    // Alert alert = new Alert("錯誤", "記憶體不足,無法完成操作", null, AlertType.ERROR);
    // display.setCurrent(alert);
} else {
    byte[] buffer = new byte[maxSize];
    // 進行網路下載...
}

關鍵點:freeMemory() * 2/3 留有安全邊際,防止分配瞬間 GC 尚未完成導致實際可用不足。

2. 減少圖片資源縮減 JAR 體積

策略:程式碼彈性化,圖片可選載入。低配裝置只需移除圖片檔重打包,程式碼零修改。

啟動 Logo/介面美化圖片:

Image logo = null;
try {
    logo = Image.createImage("/logo.png");
} catch (Exception e) {}

if (logo == null) {
    // 降級以文字顯示
    g.setColor(0);
    g.drawString("MyApp", getWidth()/2, getHeight()/2, Graphics.HCENTER | Graphics.BASELINE);
} else {
    g.drawImage(logo, getWidth()/2, getHeight()/2, Graphics.HCENTER | Graphics.VCENTER);
}

List/ChoiceGroup 選單圖示:

Image icon = null;
try { icon = Image.createImage("/item_icon.png"); } catch (Exception e) {}
append("選項文字", icon); // icon 為 null 時僅顯示文字,功能完全正常

實務效果

  • 高配版:保留所有圖片,JAR 較大,介面豐富。
  • 低配版:刪除 logo.png, item_icon.png 等非核心圖片,重新打包 → JAR 大幅縮小,程式碼無需變動,功能完整保留。

系列後續主題預告

  • (二) 系統適配:偵測 Optional API (MMAPI, WMA, M3G...) 支援度。
  • (三) 畫面導航:靈活的 Screen 管理與命令分派。
  • (四) 聯網開發:HTTP 協議最佳化、進度條、斷點續傳、Cookie 管理。
  • (五) RMS 應用:資料持久化模式與備份策略。
  • (六) 除錯與優化:Profiling、混淆、效能調優。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved