前言
J2ME 運行環境資源極其受限,優化至關重要。以下彙整 20 個實戰技巧,分為通用優化與極限優化兩類。
通用優化技巧 (1-13)
- 鎖定目標 FPS:先做小實驗平衡效果與速度。
- 重用 Graphics 物件:
GameCanvas.getGraphics() 每次新建,應取一次反覆用。
- 共用 Listener 介面:讓主 MIDlet 實作
CommandListener、ItemStateListener 等,減少物件。
- 善用廠商 SDK:廠商最懂自家硬體,尤其圖片/視訊處理常有加速。
- 用 Profiling 工具找瓶頸:WTK、廠商工具皆有;實機可用
Timer 測試。
- 謹慎使用 System.gc():非阻塞時可緩解記憶體壓力,但 Nokia 不建議,Sun 警告低階機種執行慢,慎用。
- 陣列代替 Vector:固定大小陣列效能優於動態 Vector。
- 圖片規格適配:依裝置解析度準備圖片,避免運行時縮放。
- 廢棄物件設 null:加速 GC 回收。
- 混淆器:防反編譯且縮短名稱減小 Class 檔體積。
- 大資料編碼/外部化:字串編碼或二進位檔 +
getResourceAsStream 讀取。
- 善用內建類別:如
GameCanvas 內建雙緩衝;CLDC 無集合框架,用 Hashtable/Vector 實作。
- 嘗試 jPresto:自動優化工具 (未親測)。
極限優化 (14-20) —— 可能違背 OO 原則,視專案嚴格度採用
- 資源合併:所有資源打包成單一資料檔。
- 圖集:小圖合併成大圖,運行時切割。
- 有限度 OO:純 OO 意味著更多虛方法、層次、Class,適度妥協。
- 極少 Class:每個 Class 有系統開銷。
- 極少方法:速度排序:同步方法 < 介面方法 < 實例方法 < final 方法 < 靜態方法。
- final static 方法:微幅提速。
- public 欄位代替 Getter/Setter:注意安全性。
結語
優化效果因模擬器/實機而異,必須以目標裝置規格為基準。上述技巧非萬能靈藥,請依專案實況選擇採用。