程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 用J2ME MIDP開發無線應用程序

用J2ME MIDP開發無線應用程序

編輯:JAVA編程入門知識


  J2ME(Java 2 Micro Edition)的出現把Java開發者徹底地引入了開發無線設備應用程序的廣闊天地。當然,移動設備因其功能和處理能力而多種多樣,但是,J2ME通過定義configurations和profiles而對這些差異性進行了邏輯抽象,然後整合兩種設置為在特定移動設備上開發應用程序提供了一套完整的平台和API。
  
  連接限制設備配置CLDC(Connected Limited Device Configuration)和移動信息設備設置MIDP(Mobile Information Device Profile)一道支持目前在用的大多數主流移動設備,比如PDA、手機和雙向尋呼機等。本文將通過J2ME構建一個簡單的示范應用程序向讀者介紹其基本知識。
  J2ME示例程序
  實際構建、安裝和運行MIDP應用程序的過程同標准Java應用程序存在很大不同。為了“公平”起見,這一問題只能留待今後的文章對其進行專門闡述了。現在我們就來了解了解示例程序的結構。這個程序就是程序員剛入門時幾乎都要遭遇的“Hello World!”應用程序,在這裡,程序名是HelloJ2ME,程序代碼見清單A。運行HelloJ2ME程序後的顯示結果見圖A。
  
  用J2ME MIDP開發無線應用程序[組圖]
  
  我知道,這個程序非常簡單,不過要作為一種講解新語言的入門示例也足夠了。正如你看到的那樣,HelloJ2ME擴展了MIDP基本應用程序MIDlet類並導入了兩個包名稱空間: javax.microedition.midlet和javax.microedition.lcdui。前者包括該應用程序的MIDlet基類,而後者則提供了一組類似Swing的GUI元素供給用程序使用。
  
  MIDlet類提供了三種抽象方法供設備的應用程序治理器用來同其運行的應用程序通訊。只要應用程序被激活、構造器執行完畢之後就會立即調用startApp方法而不是在應用程序最初啟動的時候這樣做。應用程序在一次運行的過程中會在活動和不活動狀態之間多次轉變,這樣你就不必編寫單獨運行的初始化代碼了,比如初始化用戶界面的代碼等,因為這類代碼很可能會執行好多次。為此應該采用構造器來完成同一功能。
  
  治理器指示應用程序關閉之後就會調用destroyApp方法。和startApp方法不一樣的是該方法只在應用程序生存期內調用一次,所以在這個方法內編寫清除代碼是很安全的。實際上,由於MIDP並沒有為對象包括finalize函數,所以你不得不在以上方法處執行清除功能。同時,由於典型的移動設備比通常情況下的標准平台欠缺穩定,經常被用戶進行開關機或者復位操作。所以你也不能真正指望destroyApp派上大用場。
  
  最後的抽象方法就是pauseApp了。該方法主要作用是發出這樣的通知:因為用戶轉換到其他應用或者采用了設備的某項功能促使應用程序不能繼續運行而暫時停止應用程序的運行。由於大多數移動設備都缺乏執行多任務的處理能力,以上的這類情況是完全可能發生的。所以在這個方法中應該編碼釋放所有資源。一旦應用程序重新開發運行則應用程序治理器會再度調用startApp方法。
  
  同應用程序治理器的通訊
  
  當然,通訊必須是雙向有效的,MIDP應用程序也不例外。MIDlet提供了一組方法供你用來同應用程序治理器通訊:
  
  NotifyDestroyed告訴治理器你的應用程序要關閉了。調用該方法不會執行destroyApp方法,所以你必須手工調用它。
  NotifyPaused通知治理器你的應用程序要暫停了。
  ResumeRequest要求應用程序治理器重啟暫停的應用程序。
  GetAppProperty從輸入或者應用程序描述文件中獲取應用程序的配置信息,這些將在以後討論。現在我們不妨認為該方法就是訪問專有的初始化文件。
  治理界面
  我剛才已經提到過, javax.microedition.lcdui包包含了MIDP應用程序要采用的用戶界面元素。這個包裡的大多數UI(用戶界面)元素同Swing的對等物非常相似,只是名字不同而已,其API後台的事件系統在工作方式上也基本一樣。此外,同HelloJ2ME 程序的構造器中代碼一樣,你應該把事件偵聽器對象注冊為控件。這樣,為簡單起見,HelloJ2ME即可實現自身的commandListener接口並為其包含的唯一Command對象起到偵聽器的作用。不過,創建偵聽器類、匿名內部類和專用類的其他技術也可以實現以上目標。
  
  GUI組件族
  
  lcdui包內基本上定義了三組GUI組件,我是根據其基類對它們分組的,它們是Screen組件、Item組件和Miscellaneous Displayable組件。
  
  Screen組件
  Screen組件派生於Screen抽象類,其作用是提供傳統的、window風格的GUI控件。HelloJ2ME程序所采用的Form對象就是Screen類的派生,其中包含和顯示GUI控件。其他Screen組件還包括Alert對話框和顯示多組選項的List以及容納多行條目的TextBox等。
  
  Item組件
  Item組件就是傳統的控件,比如“Hello World!”程序的TextField等,它們都派生於Item抽象類,後者提供了標簽、事件處理和顯示控件的統一API。ChoiceGroup、 DateField、 Gauge、 ImageItem和StringItem則是其他類型的Item組件。
  
  Miscellaneous Displayable 組件
  Miscellaneous Displayable組件都派生於高級的Displayable抽象類或者具有同其相似的工作方式。該組組件有Command命令按鈕、顯示滾動文本的Ticker以及顯示圖象的Graphics等,此外還包括操作預定義項的Choice界面等。以上這些組件無法歸於其他兩類,所以單獨組成一組歸類。
  
  圖B所示就是這些組件的關系層次。
  
  用J2ME MIDP開發無線應用程序[組圖]
  
  以上的全體圖形控件都是由Display對象治理的,每一個應用程序都會訪問這一對象的單一、私有實例。該實例可以通過靜態的Display.getDisplay方法獲得,該方法通常會把指向該實例的引用保存在一個成員變量裡,HelloJ2ME在其構造器中就是這樣做的。除了為特定屏幕元素設置焦點(setCurrent)和獲取元素焦點的方法(getCurrent)之外,Display還暴露了一些用於獲得設備顯示能力信息的方法,比如是否顯示彩色的(isColor)和支持顯示色彩數量的(numColors)等方法。
  
  小結
  以上內容是為移動平台開發Java應用程序的一些基礎知識。首先,你必須處理一個簡單的類庫:沒有反射、JNI也沒有我所提到的finalization支持。其次,你必須想法克服內存的局限性,因為大多數運行MIDP profile的移動設備可用的動態內存不會超過100K。這樣,你就需要非凡在意算法對內存的利用率。最後,你還要清楚地熟悉到,任何網絡連接都會受到帶寬和環境的限制。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved