編程高手

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            3 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          2009年10月19日 #

           

          J2ME的適用范圍很廣,而且針對J2ME的規(guī)范也在增加,很多人因?yàn)閷Ω鞣N規(guī)范的作用不了解造成對J2ME體系的誤解。本文主要講述一下 J2ME 的結(jié)構(gòu)和構(gòu)成,同時(shí)對一些容易混淆的概念進(jìn)行解釋。
          J2ME是什么?
          很多人把J2ME等同于手機(jī)程序開發(fā),其實(shí)這是一個(gè)非常錯(cuò)誤的說法。也有人認(rèn)為J2ME是一個(gè)標(biāo)準(zhǔn),一個(gè)規(guī)范,這同樣是不正確的。
          Sun 公司將 J2ME (Java 2 Micro Edition,Java 2微型版)定義為“一種以廣泛的消費(fèi)性產(chǎn)品為目標(biāo)的、高度優(yōu)化的 Java 運(yùn)行時(shí)環(huán)境”。自從 1999 年 6 月在 JavaOne Developer Conference 上聲明之后,J2ME 進(jìn)入了小型設(shè)備開發(fā)的行列。通過 Java 的特性,遵循 J2ME 規(guī)范開發(fā)的 Java 程序可以運(yùn)行在各種不同的小型設(shè)備上。
          J2ME是Sun公司為嵌入式開發(fā)所定義的一個(gè)框架,一系列標(biāo)準(zhǔn)的規(guī)范所組成。所以J2ME是一個(gè)協(xié)議簇,而不是單一的規(guī)范。
          J2ME是一個(gè)非常大的概念,下面的一幅圖可以看看J2ME的適用范圍。

          圖1
          圖中的CDC 和CLDC 是支持J2ME的兩類設(shè)備的配置的簡稱,分別是:
          ? ?CDC (Connected Device Configuration,連接設(shè)備配置),運(yùn)行在這一配置上的程序稱為J2ME Application,在CVM上進(jìn)行解釋。
          ? ?CLDC(Connected Limited Device Configuration,連接限制設(shè)備配置),運(yùn)行在這一配置上的程序稱為MIDlet ,在KVM上進(jìn)行解釋。
          可以把CDC 和CLDC 理解為對硬件的定義,就如同PC機(jī)和小型機(jī)一樣,這些設(shè)備提供Java程序運(yùn)行的硬件環(huán)境。
          在 J2ME 中有兩類虛擬機(jī):CVM (C Virtual Machine,C虛擬機(jī))與 KVM (K Virtual Machine,K虛擬機(jī))。KVM 和 CVM均可被看作是一種 Java 虛擬機(jī),是 JVM 的子集,在功能上都是 JVM 的縮減版。這兩類虛擬機(jī)的適用范圍并不相同,簡單地說,CVM 的功能比KVM 功能更為強(qiáng)大。
          這里再補(bǔ)充一點(diǎn),J2ME還包括對了Java Card 的定義,用于各類IC卡。JavaCard 和CDC/CLDC在J2ME中是相同的地位。
          JavaCard 的網(wǎng)頁見:http://java.sun.com/products/javacard/index.jsp ;。
          所以在這里要理解J2ME的含義,就可以從CLDC 和CDC這兩方面進(jìn)行了解。
          CLDC 與CDC的對比
          在前面的圖1中已經(jīng)顯示出CLDC 和CDC在適用設(shè)備上的區(qū)別。
          CDC主要針對32位的處理器主頻通常在75MHz以上,內(nèi)存可能在1~4MB 。CDC 針對的設(shè)備主要是數(shù)字電視、機(jī)頂盒、網(wǎng)絡(luò)電話、車載計(jì)算設(shè)備等。這些設(shè)備的特點(diǎn)是:
          ? 有線連接
          ? 電源穩(wěn)定
          ? 設(shè)備外設(shè)資源比較受限
          CLDC設(shè)備的最低配置為:CPU為16位、32位主頻在 16MHz以上的處理器,設(shè)備的內(nèi)存比較少,可能只有512KB,甚至更少。現(xiàn)在硬件的發(fā)展非常快,以前所定義的CLDC的設(shè)備目前的設(shè)備甚至遠(yuǎn)遠(yuǎn)超過原來的定義。不過請注意一下,J2ME 對CLDC設(shè)備配置的定義只是一個(gè)最低要求的定義。其實(shí)目前很多CLDC設(shè)備的配置都遠(yuǎn)遠(yuǎn)超過上面的配置,不過要分辨CLDC設(shè)備主要要從設(shè)備特點(diǎn)上進(jìn)行區(qū)別。這些設(shè)備的特點(diǎn)是:
          ? 無線連接
          ? 沒有穩(wěn)定的電源供應(yīng)(通常使用電池)
          ? 設(shè)備外設(shè)資源極少
          具體一點(diǎn)說如智能手機(jī),例如:Nokia 7650,Nokia 3650等,還有例如PDA設(shè)備也都應(yīng)該歸于CLDC的范圍。
          簡表
          J2ME 使用配置(CDC或CLDC)和簡表(Profile)定制JRE(Java Runtime Environment, Java 運(yùn)行時(shí)環(huán)境)。一個(gè)完整的 JRE由配置和簡表組成,配置決定了所使用的 JVM(可能是CVM 或 KVM),而簡表通過定義特定的類來為應(yīng)用程序提供功能上的支持,一個(gè)簡表定義了設(shè)備所提供的 API 集合。
          如果把CDC 、CLDC 理解稱為硬件配置的話,Profile可以理解為硬件上的操作系統(tǒng),這個(gè)操作系統(tǒng)提供了程序可以調(diào)用的所有功能集合,也就是說Profile定義了各種功能的 API 函數(shù)集。當(dāng)然這個(gè)比喻并不完全恰當(dāng),因?yàn)镃VM 和 KVM 才充當(dāng)了解釋Java程序執(zhí)行的角色。又或者可以把Profile理解稱為虛擬機(jī)上提供的開發(fā)包,不同的開發(fā)包提供不同的核心功能調(diào)用。不管怎么理解都好,只要便于自己理解。
          這里再補(bǔ)充說明一點(diǎn):CDC規(guī)范和CLDC規(guī)范中也都定義了基本的API集合,這些API提供Java 的基本功能,例如:java.io、java.lang、java.util 、javax.microedition.io 這些包就是定義與CDC 和CLDC中的。不過這些包都是Java最基本的功能,更多的面向設(shè)備的功能性 API 必須還是通過簡表來提供。
          下面介紹一下幾種常見的簡表:
          ? MIDP (Mobile Information Devices Profile,移動(dòng)信息設(shè)備簡表):定義了移動(dòng)信息設(shè)備的類型和提供相關(guān)的API集合, MIDP 所定義的功能更加面向用戶,而且比 CLDC 更高級(jí)。
          ? IMP (Mobile Information Device Profile,信息模塊簡表):定義了提供網(wǎng)絡(luò)連接,但是顯示方式比較單一的設(shè)備簡表,例如告警器。
          ? Foundation Profile(基礎(chǔ)簡表):提供除了用戶界面以外 J2SE 所能夠提供的標(biāo)準(zhǔn)類庫。
          ? Personal Profile(個(gè)人簡表):針對那些資源相對有限,但是對網(wǎng)絡(luò)訪問要求很高,基于AWT圖形界面的設(shè)備,例如Web-TV、汽車導(dǎo)航系統(tǒng)等。
          除這里提到的三個(gè)簡表外還有其他類型的簡表,但是上面的四個(gè)簡表是Sun公司所推薦的,而且是開放的簡表。例如以前的KJava就是和MIDP 類似的簡表。
          J2ME內(nèi)定義的各種規(guī)范介紹
          到目前為止,本文一共提到了幾個(gè)規(guī)范:
          ? CLDC 規(guī)范:目前分為 v1.0 JSR 30,v1.1 JSR 139
          ? CDC 規(guī)范:目前分為 v1.0 JSR 36,v1.1 JSR 218
          ? MIDP 規(guī)范:分為 v1.0 JSR 37,v2.0 JSR 118
          ? IMP 規(guī)范:JSR 195
          ? FP 規(guī)范:JSR 46
          ? PP 規(guī)范:JSR 62
          這些規(guī)范都是J2ME中的基礎(chǔ)規(guī)范,例如說CLDC 設(shè)備必須要支持 CLDC規(guī)范,同時(shí)要選擇支持一個(gè)簡表規(guī)范,可能是MIDP 或者其他簡表。對于CDC 設(shè)備來說也必須支持 CDC 規(guī)范,同時(shí)選擇支持一個(gè)簡表規(guī)范,可能是FP,也可能是PP。
          對于其他規(guī)范,設(shè)備可以選擇支持。接下來我引用一下Sun公司J2ME主頁對各種規(guī)范的介紹:
          適用于CLDC設(shè)備的規(guī)范:
          Connected Limited Device Configuration (CLDC); JSR 30, JSR 139 CLDC 規(guī)范,前面已經(jīng)介紹過

          Mobile Information Device Profile (MIDP); JSR 37, JSR 118 MIDP 規(guī)范,前面已經(jīng)介紹過

          Information Module Profile (IMP), JSR 195 IMP 規(guī)范,前面已經(jīng)介紹過

          Java Technology for the Wireless Industry (JTWI), JSR 185 無線Java行業(yè)規(guī)范

          Wireless Messaging API (WMA); JSR 120, JSR 205 無線信息規(guī)范,提供短信和彩信功能

          Mobile Media API (MMAPI); JSR 135 移動(dòng)媒體規(guī)范,提供音頻視頻播放

          Location API for J2ME (JSR-179) 定位規(guī)范,提供定位功能

          SIP API for J2ME (JSR-180) 提供對會(huì)話發(fā)起協(xié)議的支持

          Security and Trust Services API for J2ME (JSR-177) 提供網(wǎng)絡(luò)安全與信任的支持

          Mobile 3D Graphics (JSR-184) 提供對3D繪圖的支持

          J2ME Web Services APIs (WSA), JSR 172 提供對Web Services的支持

          Bluetooth API (JSR-82, Motorola, Java Partner Site) 提供對蘭牙的支持

          PDA Optional Packages for the J2ME Platform (JSR 75) 提供對PDA中文件、通信錄等存取的支持

          適用于CDC設(shè)備的規(guī)范:
          Connected Device Configuration (CDC); JSR 36, JSR 218 CDC規(guī)范,前面已經(jīng)介紹過

          Foundation Profile (FP) (JSR-46) FP 規(guī)范,前面已經(jīng)介紹過

          Personal Profile (PP) (JSR-62) PP 規(guī)范,前面已經(jīng)介紹過

          Personal Basis Profile (PBP) (JSR-129) 類似于PP的規(guī)范,但在圖形界面方面無需支持AWT

          J2ME RMI Optional Package, (RMI OP); JSR 66 提供對遠(yuǎn)程調(diào)用的支持

          JDBC Optional Package for CDC/Foundation Profile API (JSR-169) 提供對JDBC的支持

          同時(shí)請大家注意一下,這里提到的適用于并不是表示只適用于,很多規(guī)范是可以同時(shí)適用于CDC 和CLDC 設(shè)備的。
          J2ME的副作用:升級(jí)你的系統(tǒng)
          這真是一個(gè)痛苦的事情!J2ME 中各種規(guī)范正處于一個(gè)不斷擴(kuò)充和不斷完善的過程,舊設(shè)備無法支持新規(guī)范的事情會(huì)越來越多,而嵌入式設(shè)備的種類多很難在短時(shí)間內(nèi)實(shí)現(xiàn)對各種規(guī)范的支持。
          相關(guān)網(wǎng)頁
          Java Community Process:http://jcp.org/ ;
          Sun公司 J2ME 主頁:http://java.sun.com/j2me/
          Sun公司 J2ME 下載頁:http://java.sun.com/j2me/downloads/index.html ;
          支持J2ME的設(shè)備列表:http://developers.sun.com/techtopics/mobility/device/
          對一些問題的看法
          J2ME 很簡單
          完全錯(cuò)誤,J2ME的范圍和規(guī)模非常之大,適用范圍也非常廣。要知道嵌入式設(shè)備無論從種類還是結(jié)構(gòu)來將都要遠(yuǎn)遠(yuǎn)超出PC機(jī),小型機(jī)的范圍。
          認(rèn)為J2ME簡單的人,多半是把J2ME過于具體化。例如:認(rèn)為手機(jī)程序的開發(fā)就是J2ME開發(fā)的全部。或者認(rèn)為在PDA上開發(fā)一個(gè)Java程序就是J2ME開發(fā)的全部。
          KJava程序開發(fā)就是手機(jī)程序開發(fā)
          KJava 也是一個(gè)Profile,和前面提到的MIDP的功能和作用類似。以前KJava是Sun公司提供的一個(gè)示范性簡表。但是由于事實(shí)原因現(xiàn)在很多智能手機(jī)都支持KJava簡表,和MIDP相比 MIDP是一個(gè)更開放的規(guī)范。
          J2ME只能用于手機(jī)程序開發(fā)
          目前看來J2ME還沒有能夠全面的滲透到各種嵌入設(shè)備中,而且目前最大的用途就是一些手機(jī)游戲。但是J2ME的用途絕對不止這些,J2ME 應(yīng)用的發(fā)展有賴于各種硬件廠商提供的支持。
          J2ME已經(jīng)可以作為嵌入設(shè)備上操作系統(tǒng)
          Java程序是解釋執(zhí)行的,所以必須還要有操作系統(tǒng)的支持。Palm OS、WinCE、Symbian的 EPOC、嵌入Linux這些才是操作系統(tǒng),而且在嵌入式智能設(shè)備上應(yīng)用比較廣泛。至于JavaPhone之類的純Java產(chǎn)品還有待Sun公司的開發(fā)。1997年,Sun公司兼并了長期從事嵌入式實(shí)時(shí)操作系統(tǒng)開發(fā)的Chorus公司,希望為Java嵌入技術(shù)的發(fā)展提供了良好的操作系統(tǒng)環(huán)境。以后應(yīng)該會(huì)出現(xiàn)只支持Java的硬件設(shè)備和操作系統(tǒng)。不過從前面提到的四種嵌入式操作系統(tǒng)來說,支持C/C++語言才是首位。
          J2ME程序可以實(shí)現(xiàn)一次編寫到處運(yùn)行
          基本上很難。因?yàn)镴2ME中定義的規(guī)范很多,每個(gè)規(guī)范有自己的API 集,不同的廠商還有自己提供的針對自身設(shè)備的 API集,而要求所有的嵌入設(shè)備都支持完全相同的規(guī)范集合是不現(xiàn)實(shí)的。所以利用廠家提供的 API 集開發(fā)程序還會(huì)保持一段相當(dāng)長的時(shí)間。
          但是有些基本的規(guī)范是被強(qiáng)制要求的,例如CLDC 和MIDP 要求的API 集就要求所有的智能手機(jī)支持。不過另一個(gè)方面講即使是相同的規(guī)范也會(huì)有不同的版本,不同的版本中對 API 集的要求是不同的。
          在我看來 J2ME的最大好處是把Java 帶入了
          posted @ 2009-10-19 12:36 米老鼠 閱讀(152) | 評(píng)論 (0)編輯 收藏

          Sun憑借最新的Java技術(shù)試圖將其進(jìn)一步實(shí)現(xiàn)為開發(fā)者的目標(biāo)平臺(tái),然而Java平臺(tái)自身卻分成了三種平臺(tái):Standard版、Enterprise版和Micro版。Micro版,也就是所謂的J2ME,從問世伊始就專門設(shè)計(jì)為供內(nèi)存量小和處理能力較低的移動(dòng)設(shè)備作為Java開發(fā)平臺(tái)使用。

          從表面上看,這樣做對那些希望提升應(yīng)用程序的移動(dòng)計(jì)算能力的開發(fā)者來說是一件好事。然而,“移動(dòng)設(shè)備”這個(gè)術(shù)語卻涵蓋了相當(dāng)廣泛的領(lǐng)域,包括傳統(tǒng)的個(gè)人數(shù)字助理(PDA)、所謂的智能電話、傳呼機(jī)乃至GPS單元等,它們都具有各不相同的硬件配置。同樣的,這類設(shè)備的市場也支離破碎,同一供應(yīng)商的兩種設(shè)備之間都還存在兼容性問題,更別說不同供應(yīng)商的設(shè)備產(chǎn)品了,在很多情況下簡直就是亂七八糟。
          給這些五花八門的移動(dòng)設(shè)備提供一種普遍適用的開發(fā)平臺(tái)看來多半是不可能的了。所以J2ME定義了兩種類型的規(guī)范,它們攜手提供一種移動(dòng)Java平臺(tái),這兩種規(guī)范就是configurations 和profiles。Configuration和profile規(guī)范提出了相當(dāng)多的技術(shù)術(shù)語,下面我們就來討論一些。


          Configuration
          J2ME通過對Configuration的抽象來處理大量千差萬別的移動(dòng)設(shè)備硬件功能。J2ME configuration定義了特定設(shè)備可用的虛擬機(jī)和低級(jí)API,同時(shí)提供相應(yīng)的開發(fā)基礎(chǔ)。目前可用的Configuration有兩種,它們是連接設(shè)備配置CDC(Connected Device Configuration)和連接有限設(shè)備配置CLDC(Connected Limited Device Configuration)。


          連接設(shè)備配置

          CDC應(yīng)用于相對內(nèi)存量較大、更強(qiáng)處理器的移動(dòng)設(shè)備。CDC規(guī)范采用了內(nèi)存優(yōu)化的虛擬機(jī),也就是所謂的CVM,通過它提供等同標(biāo)準(zhǔn)JVM的特性。按照Sun的文檔說明, CDC針對新型PDA、智能通訊設(shè)備和機(jī)頂盒之類的高端設(shè)備。為了能夠受到CDC支持,移動(dòng)設(shè)備必須至少具備以下條件:

          用于CVM和Java API庫的2 MB內(nèi)存。
          32位微處理器或者控制器。
          可用網(wǎng)絡(luò)連接,最好是高帶寬連接。
          連結(jié)有限設(shè)備配置
          CDC的要求有利于昂貴的移動(dòng)電話、IR掃描儀或類似產(chǎn)品。CLDC則主要針對那些更輕便、更便宜、不能滿足CDC要求的設(shè)備。

          CLDC采用了更輕型的虛擬機(jī),設(shè)計(jì)為在較低內(nèi)存環(huán)境下運(yùn)行。這種JVM的參考實(shí)現(xiàn)也就是所謂的KVM,為什么要叫KVM呢?這是因?yàn)檫@種虛擬機(jī)的大小是以千字節(jié)度量的。CLDC 的設(shè)備需求如下:

          最低160KB的內(nèi)存,其中128KB用于KVM和運(yùn)行時(shí)庫
          最低16位25-MHz處理器
          有限的用戶界面功能
          沒有(或者間歇的)低帶寬網(wǎng)絡(luò)連接
          由于受到嚴(yán)格的內(nèi)存容量限制,KVM因此缺乏一些完整JVM所提供的特性,這就是說,你可能得改變自己的編程風(fēng)格了。KVM在如此低內(nèi)存要求下不得不在浮點(diǎn)數(shù)學(xué)計(jì)算、反應(yīng)和對finalizers類的支持等方面對性能折中。使用CLDC的開發(fā)者在編譯程序之后必須預(yù)先采用J2ME開發(fā)工具包所提供的一種檢查工具對他們的源代碼進(jìn)行校驗(yàn)。

          profile
          如果說配置為應(yīng)用程序提供了基礎(chǔ),那么profile則提供了應(yīng)用程序的框架。profile定義了一整套J2ME應(yīng)用程序可用的API類而且專門針對給定配置創(chuàng)建。Sun推出了2種可用的參考J2ME profile:基礎(chǔ)(Foundation)和移動(dòng)信息設(shè)備profileMIDP(Mobile information Device Profile)。

          基礎(chǔ)profile主要用于CDC配置,因而其虛擬機(jī)幾乎等同于標(biāo)準(zhǔn)的虛擬機(jī)。這意味著,使用基礎(chǔ)profile的開發(fā)人員必須訪問完整實(shí)現(xiàn)的J2SE特性集。

          MIDP連同功能較低的CLDC配置一道為開發(fā)今天的移動(dòng)設(shè)備應(yīng)用程序提供了你最可能用到的Java平臺(tái)。MIDP支持J2SE類庫的有限子集而且為在CLDC配置上使用定義了定制的用戶接口和輸入/輸出類。

          編寫一次到處可行?
          兼容性如何呢?J2SE應(yīng)用程序能在J2ME平臺(tái)上運(yùn)行嗎?這些問題的答案主要取決于配置和profile的具體應(yīng)用了。J2SE代碼無須或者很少修改即可采用CDC和基礎(chǔ)profile運(yùn)行。然而,正如我們在這里所討論的那樣,由于主機(jī)硬件受到限制,CLDC和MIDP profile只提供了很有限的功能集合。因此它J2SE應(yīng)用程序不大可能在不加修改的情況下就運(yùn)行在這類平臺(tái)上,除非它把自己限制在兩種平臺(tái)的API交集之內(nèi)(嚴(yán)重地限制了其功能)。因?yàn)镃IDC的要求對應(yīng)了今天大多數(shù)手持設(shè)備的功能,所以任何J2SE應(yīng)用軟件想不經(jīng)修改就運(yùn)行在給定的設(shè)備上是值得懷疑的。你多半得修改需要移植到J2ME的應(yīng)用軟件。但也別緊張。從保住飯碗的角度看這未嘗不是好事。

          posted @ 2009-10-19 11:59 米老鼠 閱讀(116) | 評(píng)論 (0)編輯 收藏

          2009年10月18日 #

          在J2ME編程過程中,MIDlet是最核心的類之一,熟悉該類的使用是J2ME學(xué)習(xí)過程中必須首先掌握的類,下面就結(jié)合實(shí)際介紹一下該類的實(shí)際使用。

          眾所周知,J2ME程序都是從MIDlet類開始執(zhí)行,系統(tǒng)規(guī)定了MIDlet的生命周期。規(guī)定MIDlet程序有三種狀態(tài):

          1、 暫停狀態(tài)

          2、 運(yùn)行狀態(tài)

          3、 銷毀狀態(tài)

          系統(tǒng)在執(zhí)行MIDlet程序時(shí),首先構(gòu)造一個(gè)MIDlet類型的對象,然后使程序進(jìn)入到暫停狀態(tài),按照生命周期的規(guī)定,系統(tǒng)會(huì)自動(dòng)調(diào)用MIDlet對象的startApp方法使程序進(jìn)入到運(yùn)行狀態(tài),開始程序的執(zhí)行。如果在創(chuàng)建MIDlet對象的過程中,或者是調(diào)用startApp的方法中發(fā)生了異常,則系統(tǒng)會(huì)自動(dòng)調(diào)用MIDlet對象的destroyApp方法進(jìn)行到銷毀狀態(tài),也就是使程序退出。

          所以生命周期中的第一個(gè)需要注意的地方就是熟悉在以上狀態(tài)轉(zhuǎn)換過程中,系統(tǒng)會(huì)自動(dòng)調(diào)用的方法,然后在實(shí)際編寫MIDlet類的時(shí)候,在這些方法中書寫合適的代碼,這樣就可以在系統(tǒng)規(guī)定的狀態(tài)轉(zhuǎn)換時(shí),自動(dòng)調(diào)用這些方法。

          另外一個(gè)需要說明的狀態(tài)是暫停狀態(tài),系統(tǒng)在程序運(yùn)行過程中,如果手機(jī)有來電,則系統(tǒng)會(huì)自動(dòng)的使MIDlet程序進(jìn)行到暫停狀態(tài),在進(jìn)入到暫停狀態(tài)以前,系統(tǒng)會(huì)自動(dòng)調(diào)用MIDlet對象的pauseApp方法。當(dāng)電話接聽完畢以后,系統(tǒng)會(huì)自動(dòng)使 MIDlet程序進(jìn)行到運(yùn)行狀態(tài),在進(jìn)入到運(yùn)行狀態(tài)以前,系統(tǒng)還會(huì)自動(dòng)調(diào)用startApp方法使系統(tǒng)進(jìn)入到運(yùn)行狀態(tài)。

          對于上面的內(nèi)容做一個(gè)簡單的總結(jié):

          1、 startApp方法

          在系統(tǒng)第一次運(yùn)行的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用該方法使系統(tǒng)進(jìn)入到運(yùn)行狀態(tài)。

          當(dāng)系統(tǒng)從暫停狀態(tài)切換到運(yùn)行狀態(tài)以前,系統(tǒng)也會(huì)自動(dòng)調(diào)用該方法。

          2、 pauseApp方法

          當(dāng)系統(tǒng)從運(yùn)行狀態(tài)切換到暫停狀態(tài)以前,會(huì)自動(dòng)調(diào)用該方法。

          3、 destroyApp方法

          當(dāng)系統(tǒng)發(fā)生異常退出程序以前,會(huì)自動(dòng)調(diào)用該方法。該方法有一個(gè)boolean類型的參數(shù),如果該參數(shù)為true則代表該方法必須清理和釋放資源,如果為false可以拋出一個(gè)MIDletStateChangeException異常來表明它不想立即退出。

          熟悉了這幾個(gè)方法的使用以后,可以實(shí)現(xiàn)很多實(shí)用的功能,下面介紹兩個(gè)實(shí)際功能的實(shí)現(xiàn):

          1、 實(shí)現(xiàn)來電話時(shí)暫停的功能

          在實(shí)際的MIDlet編程中,必須實(shí)現(xiàn)手機(jī)來電時(shí)暫停程序的功能,如果有線程時(shí),還需要把線程停止掉,然后當(dāng)電話結(jié)束以后,重新顯示界面,并重新啟動(dòng)線程。

          startApp方法的具體的實(shí)現(xiàn)代碼框架如下:

          public void startApp() {
          //獲得當(dāng)前顯示的界面
          Displayable curr = display.getCurrent();
          //判斷是否是第一次運(yùn)行
          if (curr == null) {
          //顯示第一個(gè)界面,例如logo界面
          } else {
          //顯示來電以前的界面
          display.setCurrent(curr);
          //如果需要,還可以啟動(dòng)線程
          }
          }

          如果游戲界面中有線程,則需要在來電時(shí)暫停線程,而pauseApp在暫停以前會(huì)被系統(tǒng)調(diào)用,所以可以在pauseApp方法中實(shí)現(xiàn)該功能。pauseApp方法的實(shí)現(xiàn)代碼框架如下:

          public void pauseApp() {
          //獲得當(dāng)前顯示的界面
          Displayable curr = display.getCurrent();
          //判斷是否是游戲界面
          if (curr instanceof GameCanvas) {
          //停止線程
          }
          }
                2、 實(shí)現(xiàn)按掛機(jī)時(shí)清理的功能

          熟悉MIDlet編程的人都知道,在程序運(yùn)行過程中按掛機(jī)鍵,可以使MIDlet程序退出,在低級(jí)用戶界面編程中,可以在keyPressed方法中捕獲該事件,但是卻無法處理,因?yàn)椴东@以后,程序就直接退出了。

          如果游戲中有背景音樂等,則當(dāng)按掛機(jī)鍵直接退出的時(shí)候,音樂還會(huì)存在,這樣就會(huì)造成很多的問題。但是按掛機(jī)鍵以后,在程序退出以前,系統(tǒng)會(huì)自動(dòng)調(diào)用destroyApp方法,所以可以把最后處理的代碼放置在destroyApp方法中。

          下面接著來看一下另一組方法,來繼續(xù)熟悉MIDlet類的使用:

          1、 notifyPaused

          使程序進(jìn)入暫停狀態(tài)

          2、 notifyDestroyed

          是程序進(jìn)入到銷毀狀態(tài)。

          以上兩個(gè)方法和上面的三個(gè)方法不同,上面的三個(gè)方法是在狀態(tài)切換過程中,會(huì)自動(dòng)被系統(tǒng)調(diào)用。而這兩個(gè)方法不會(huì)被系統(tǒng)自動(dòng)調(diào)用,但是程序員在實(shí)際編程過程中可以手動(dòng)調(diào)用這兩個(gè)方法,使程序進(jìn)入指定的狀態(tài)。

          比如如果想實(shí)現(xiàn)程序退出的功能,就只需要使MIDlet程序進(jìn)入到銷毀狀態(tài)即可,也就是只需要手動(dòng)調(diào)用notifyDestroyed方法即可。

          上面是MIDlet類中最主要的兩組方法,下面分MIDP1.0和MIDP2.0來分別介紹剩下的方法的作用。首先看一下MIDP1.0中的兩個(gè)方法:

          1、 getAppProperty

          獲得jad文件和manifest文件中屬性的值,如果一個(gè)屬性在以上兩個(gè)文件中都包含,則以jad文件中的屬性值為準(zhǔn)。

          2、 resumeRequest

          系統(tǒng)通過調(diào)用該軟件來判斷是否需要使該MIDlet進(jìn)入運(yùn)行狀態(tài)。如果需要進(jìn)入運(yùn)行狀態(tài),則系統(tǒng)會(huì)自動(dòng)調(diào)用startApp方法。

          在MIDP2.0中,MIDlet類中新增了兩個(gè)方法,下面介紹一下這兩個(gè)方法的作用,依次是:

          1、 checkPermission

          該方法是MIDP2.0的安全許可機(jī)制,在程序的實(shí)際使用過程中,可以通過該方法來檢查MIDlet是否允許特定的操作,例如聯(lián)網(wǎng)、發(fā)送短信息等等。

          如果不允許該操作則返回0,允許返回1,未定義則返回-1。

          2、 platformRequest

          使用該方法可以訪問某些系統(tǒng)功能,例如通用的功能主要有兩種

          使系統(tǒng)打開瀏覽器訪問某個(gè)特定的網(wǎng)址:

          platformRequest(“http://wap.sina.com.cn”);

          這個(gè)功能可以實(shí)現(xiàn)用來實(shí)現(xiàn)提示用戶下載新的程序版本等功能。

          使手機(jī)撥打特定的電話號(hào)碼:

          paltformRequest(“tel:1860”);

          則系統(tǒng)會(huì)自動(dòng)利用手機(jī)來撥打1860。

          posted @ 2009-10-18 20:47 米老鼠 閱讀(126) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題  
          主站蜘蛛池模板: 平谷区| 常德市| 墨竹工卡县| 固安县| 沧州市| 南投市| 武陟县| 哈巴河县| 林周县| 新昌县| 衡山县| 云龙县| 繁峙县| 霞浦县| 庆安县| 延津县| 阳新县| 宜城市| 淅川县| 栾川县| 麻城市| 仁寿县| 连城县| 磐安县| 星座| 拜城县| 黎平县| 慈利县| 温州市| 灌阳县| 怀远县| 大同县| 马边| 济阳县| 秦安县| 北宁市| 汉源县| 淳化县| 唐山市| 临沂市| 斗六市|