J2ME 定位與核心概念
J2ME (Java 2 Micro Edition) 是 Sun 針對嵌入式消費性電子產品推出的**技術與規範總稱**,非單一平台。核心架構分兩層:
- Configuration (配置):定義**縱向 API 集合**服務廣泛裝置,**規範虛擬機 (VM)**。決定「有什麼核心類庫、什麼 VM」。
- Profile (描述檔):運行在 Configuration 之上,為**具備特定硬體特徵的裝置類別**提供支援 (如螢幕、鍵盤、音頻)。決定「有什麼應用層 API」。
一個 Configuration 可支援多個 Profile (如 CLDC 上跑 MIDP、BT API、MMAPI)。
兩大標準 Configuration
| 特性 | CLDC (Connected Limited Device Configuration) | CDC (Connected Device Configuration) |
| 目標裝置 | 記憶體 160KB-512KB、16/32-bit 處理器、間歇性網路 (手機、PDA) | 記憶體 2MB+、32/64-bit 處理器、持續網路 (機頂盒、車載系統、智能手機) |
| VM | KVM (Kilobyte VM) / CLDC HI | CVM (完整 JVM 子集) |
| 核心套件 (CLDC 1.0) | java.lang, java.io, java.util (極精簡子集) |
| 核心套件 (CDC 1.0) | 近 J2SE 完整 java.* (含 Collections, Reflection, JNI, RMI 等) |
主流 Profile:MIDP (Mobile Information Device Profile)
- 運行於 CLDC 之上,針對行動裝置 (手機)。
- MIDP 1.0:引入 GUI (
javax.microedition.lcdui)、MIDlet 生命週期、RMS 持久化、GCF 網路 (HTTP/HTTPS/Datagram)。
- MIDP 2.0:新增
game 套件 (Sprite, TiledLayer, GameCanvas)、TCP Socket、多媒體 (MMAPI 子集)、安全信任域、PushRegistry 推播。
- UI 設計**非 AWT/Swing 風格**:針對鍵盤/按鍵操作,分高層 UI (可攜性高、功能少) 與低層 UI (Canvas 直接繪圖、鍵盤事件、遊戲常用)。
關鍵子系統深度剖析
MIDlet 生命週期
由 AMS (Application Management Software) 管理,必須實作三個抽象方法:
startApp():啟動/恢復進入前台。
pauseApp():切入背景/來電中斷。
destroyApp(boolean unconditional):銷毀釋放資源。
RMS (Record Management System)
- 輕量級記錄存儲 (非關聯式),資料以位元組陣列存於非揮發性記憶體,掉電不失。
- 以 Record ID 存取,**無索引、無查詢語言**,開發者自行實作邏輯。
GCF (Generic Connection Framework)
- 統一連接介面
Connector.open(url),支援 HTTP、HTTPS、Socket、Datagram、SSL、Comm 等。
- 介面導向設計,極易擴充新協定。**網路操作必須在非主執行緒**,避免阻塞 UI。
Optional Packages (JSRs)
- 針對特定硬體功能:MMAPI (多媒體)、JSR 82 (Bluetooth)、JSR 179 (Location)、JSR 184 (3D) 等。
- 裝置廠商專有 API 會導致可攜性喪失,Sun 透過 JTWI (JSR 185) 規範最小標準 (Heap ≥ 256KB 等)。
學習建議
- 先掌握 **CLDC 核心類庫** (僅百餘類),切忌想當然套用 J2SE API。
- **多寫代碼、多讀 MIDP API 文檔**,理解 MIDlet 生命週期、高/低層 UI、RMS、GCF 四大支柱。
- 關注 **JSR 規範** (jcp.org) 追蹤標準演進。
- 明確區分 **J2ME ≠ CLDC+MIDP**,CDC 生態同樣重要。