隨 著行動通訊的突飛猛進,移動開發這個新鮮的字眼慢慢成為開發者關注的熱點。在網上進行的最近一份調查顯示,有24.34%的受訪者涉足嵌入式/移動設備應 用開發,這個數字可能略高於實際的比例,但也足可說明嵌入式/移動設備應用開發是一塊誘人的新鮮奶酪。J2ME(Java 2 Micro Edition)是嵌入式/移動應用平臺的王者,Linux和WinCE分列二、三位。Nokia等廠商力推的Symbian平臺目前開發者佔有率尚未達 到滿意水準,考慮到調查項合併了嵌入式設備(例如PDA)和移動設備(例如智慧手機),Symbian、WinCE系列在移動平臺上會是競爭的主要兩方。 如果廠商能在標準實現上做得更加規範,則J2ME的跨平臺特性會發揮得更加淋漓盡致,繼續保有王者地位。本章將從J2ME的體系結構和MIDlet應用程 式模型。
什麼是J2ME
學習J2ME以前知道什麼是J2ME是非常重要的。J2ME是SUN公司針對嵌入 式、消費類電子產品推出的開發平臺,與J2SE和J2EE共同組成Java技術的三個重要的分支。J2ME實際上是一系列規範的集合,由JCP組織制定相 關的Java Specification Request(JSR)併發布,各個廠商會按照規範在自己的產品上進行實現,但是必須要通過TCK測試,這樣確保相容性。比如MIDP2.0規範就是在 JSR118中制定的。可能接觸過J2ME的開發者會覺得說J2ME是一系列的規範不準確吧。因為我們在開發中用到了很多例如CLDC (Connected Limited Devices Configuration)和MIDP(Mobile Information Devices Profile)等內容。其實這並不矛盾,因為這些就是在相關規範中制定的。如果你還沒有很好的理解這個問題,沒有關係,請繼續往下面看,我們開始認識 J2ME平臺的體系結構。
J2ME平臺體系結構
J2ME平臺是由配置(Configuration)和簡表(Profile)構成 的。配置是提供給最大範圍設備使用的最小類庫集合,在配置中同時包含Java虛擬機。簡表是針對一系列設備提供的開發包集合。在J2ME中還有一個重要的 概念是可選包(Optional Package),它是針對特定設備提供的類庫,比如某些設備是支援藍牙的,針對此功能J2ME中制定了JSR82(Bluetooth API)提供了對藍牙的支援。
目前,J2ME中有兩個最主要的配置,分別是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。他們是根據設備的硬體性能進行區分的,例如處理器、記憶體容量等。由於這個標準是在2001年的時候指定的,而現 在移動終端的處理能力和記憶體容量發展很快,如果還按照這個標準來評判可能就不準確了。 因此我們只是列出標準,供讀者參考。本教程將主要講解基於 CLDC的J2ME平臺的相關內容。隨著技術和硬體設備的不斷發展,J2ME開發網將逐步推出基於CDC的J2ME平臺介紹。
CDC的硬體參數:
·2M以上記憶體。
·具有網路連接能力,通常為無線網路。
·需要實現java虛擬機規範的全部功能。
·32位或者64位的處理器。
CLDC的硬體參數:
·512 KB 以下記憶體
·有限能源供應(通常使用電池)
·有限或非持續網路連接
·簡單的用戶介面
·16位或者32位的處理器
從上述的標準中我們不難看出CLDC主要針對那些資源非常受限的設備比如手機、 PDA、雙工尋呼機等。而CDC主要面對那些家電產品,比如機頂盒、汽車導航系統等。簡表是以配置為基礎的,例如Mobile Information Devices Profile(MIDP)就是CLDC上層的重要簡表。與配置的縱向特性不同的是,簡表是橫向的。下圖是J2ME體系結構的框圖:
J2ME體系結構框圖
MIDlet應用程式的生命週期
理解J2ME的體系結構並不像想像的那麼容易,我們覺得讀更多的資料幫助也不大,我 們直接邁向J2ME開發也許會對你理解J2ME平臺體系結構這個重要的概唸有所幫助。在MIDP中定義了一種新的應用程式模型MIDlet,它是被 Application Management Software(AMS)管理的。AMS負責MIDlet的安裝、下載、運行和刪除等操作。在被AMS管理的同時,MIDlet可以和應用管理軟體通信 通知應用管理軟體自己狀態的變化,通常是通過方法notifyDestroyed()和notifyPaused()實現的
MIDlet有三個狀態,分別是pause、active和destroyed。 在啟動一個MIDlet的時候,應用管理軟體會首先創建一個MIDlet實例並使得他處於pause狀態,當startApp()方法被調用的時候 MIDlet進入active狀態,也就是所說的運行狀態。在active狀態調用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet進入destroyed或者pause狀態。值得一提的是 destroyApp(boolean unconditional)方法,事實上,當destroyApp()方法被調用的時候,AMS通知MIDlet進入destroyed狀態。在 destroyed狀態的MIDlet必須釋放了所有的資源,並且保存了數據。如果unconditional為false的時候,MIDlet可以在接 到通知後拋出MIDletStateChangeException而保持在當前狀態,如果設置為true的話,則必須立即進入destroyed狀態。 下圖說明瞭MIDlet狀態改變情況:
MIDlet狀態圖
下面通過一個例子來驗證MIDlet應用程式的生命週期:
|
編譯該程式後運行,控制臺上就會依次輸出:
Constructor startApp is called.
當我們退出該程式時,控制臺就會輸出:
destroyApp is called.
對於詳細的生命週期問題,讀者可以查看其他教程籍或者本指南以後的更新的版本。
(責任編輯:龔勳)
No comments:
Post a Comment