J2ME學習之溫故而知新篇

火星人 @ 2014-03-10 , reply:0


學習J2ME最重要的部分是掌握J2ME的體系結構,J2ME是SUN針對嵌入式消費類電子產品推出的開發平台,事實上它是一系列的技術和規範的總稱.J2ME的核心是Configuration(配置),Configuration的目的是定義一套縱向的API而服務於廣泛的設備,同時VM也是在Configuration一層規定的.在Configuration的上面是Profile(描述),他是運行在Configuration上面的,它的目的是為一類具有某些重要特性的設備提供支持.這些特性都很重要,但是它們又不是在所有的設備上都具有的.SUN對當前市場上的設備進行硬體層的抽象根據設備的處理器、內存和網路連接能力提出了兩個標準的配置,這就是CLDC和CDC.

目前國內提及J2ME就指CLDC MIDP事實上是不準確的,忽略了更為強大的CDC是難以原諒的.配置和描述的配合異常的靈活,在一個配置上面可以同時支持多個描述,例如在CLDC上我們可以運行基於MIDP上的程序,如果設備支持的話你還可以運行Bluetooth這樣的可選包.掌握了J2ME的體系結構我們就不會在J2ME的學習中迷路.如果你要詳細了解J2ME一路發展的歷史,可以下載JSR規範讀讀,地址是http://jcp.org.

目前流行的開發是手機開發,因此我們在本文中將主要講述CLDC MIDP的主要內容,下文的J2ME也特指CLDC MIDP,但是我們清楚J2ME並不是指CLDC MIDP.

J2ME的內容並不多,如果你讀讀MIDP的api的話,發現總共也就是那麼百十個類.比起J2SE的幾千個類庫真是小巫見大巫,之提供這麼精簡的類庫給開發人員主要原因是移動信息設備的資源受限特性.在CLDC1.0中只定義了三個包java.lang,java.io和java.util.這構成了CLDC的語言基礎,在這層同時還包括了KVM.在開發J2ME程序的時候切忌想當然,並不是所有的J2SE類庫都在J2ME中得到了支持.

學好J2ME最快捷的方式就是編寫J2ME的應用程序,多讀代碼、多寫代碼.在J2ME中提出了一種新的應用程序模式——MIDlet,這個類定義在javax.microedition.midlet.MIDlet中,我們的MIDlet擴展這個類並實現它的三個抽象方法startApp(),pauseApp()和destroyApp().方法同時也反映出了MIDlet的生命周期,MIDlet的生命周期是由AMS(application management software,以前叫做JAM)管理的.關於MIDlet的生命周期可以仔細參考一下API doc.

在CLDC推出后兩個月的時間,SUN就推出了MIDP1.0,讓人興奮的是在MIDP中提供了GUI,這樣開發人員可以很方便的編寫J2ME應用程序了,GUI得類庫在javax.microediton.lcdui中定義,在MIDP2.0中SUN增加了對遊戲開發的支持推出了javax.microedition.lcdui.game包,方便開發人員開發遊戲.MIDP中的UI並沒有採取AWT或者SWING的設計思想,他們是針對PC的,在手機等設備上主要的交互還是通過按鍵完成的,因此針對滑鼠鍵盤事件機制設計的AWT/SWING並不適合J2ME平台.在掌握UI的時候,我們在頭腦中應該清楚的知道J2ME平台的界面和事件處理是區分高級和低級的.高級界面和事件處理相對簡單,但是速度快、可移植性好.低級用戶界面和時間處理相對複雜,但是功能強大、可移植性差.通常在開發遊戲的時候我們多用低級UI.

在J2ME平台中提供了一個小型的資料庫,他就是Record Management System.他的數據是存儲在非揮發性存儲器上的,因此不會程序的退出以及手機的關機而丟失,從而為J2ME平台提供了持久性存儲.RMS的設計異常的小巧,他主要負責存儲數據和標記數據,數據存儲是面向子節的,RMS規範並沒有說明什麼數據能被存儲,只要數據可以轉換為子節,都可以被存儲.RMS是通過id來標誌數據的,但是他並不是索引.設計小巧當然適合在手機上運行了,但是加重了開發人員的任務,我們負責存儲數據和讀取數據並表示數據,在本站有專題介紹RMS,請參考.

在J2ME中非常重要的框架就是GCF,它是在javax.microediton.io裡面定義的,提供了聯網的能力.在MIDP2.0中更是提供了對TCP/IP層聯網的支持.在GCF中核心是Connector,而面向介面的設計GCF的擴展性非常出色.我們在開發聯網程序的時候要涉及到的問題就是多線程問題.聯網操作在另一個線程中完成,而不能再主線程內,這樣是為了避免堵塞.這時候你應該認識到其實學好J2ME要有堅實的J2SE的基礎.

在J2ME中有個非常重要的概念就是可選包,可選包是針對特定設備功能提出的,比如有些設備可以支持移動多媒體,那麼你就可以使用MMAPI進行相關的開發.

事實上設備廠商同時會開發一些針對自己設備的API給開發人員使用,一旦你使用了他們的API那麼你的應用程序就喪失了可移植性,比如Nokia 6108的程序不能在Motorola 388c上運行.SUN為了改善這些分裂API的問題在JSR185中進行了一定強度的規範,也就是我們所知道的JTWI,JSR185並沒有提供新的API,只是對實現JTWI的設備進行了規範,比如Heap空間至少為256K等.詳細資料可下載JSR規範讀讀看.在上面代碼中的process方法被稱為回調函數.從本質上說,回調函數就是事件函數.在Windows API中常使用回調函數和調用API的程序之間進行數據交互.因此,調用回調函數的過程就是最原始的引發事件的過程.在這個例子中調用了process方法來獲得數據也就相當於在run方法中引發了一個事件.




[火星人 via ] J2ME學習之溫故而知新篇已經有95次圍觀

http://www.coctec.com/docs/java/show-post-62212.html