程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 克服J2ME開發中的艱巨之硬件設備

克服J2ME開發中的艱巨之硬件設備

編輯:J2ME
即使你是一名經驗豐富的J2SE/J2EE開發職員,假如你想成為一名好的移動Java開發職員,你就必需懂得移動設備、無線網絡和移動用戶各自的特征。本文說明了移動利用程序開發中面臨的一些挑釁,以及如何克服這些艱苦。

  J2ME答應桌面或企業Java開發者把自己已有的經驗技巧遷移到為企業和顧客建立智能移動利用程序上面。這些技巧包含Java語言的基礎概念、API和公共設計模式。但是,從桌面、服務器或瘦客戶端范疇盲目地進行“技巧遷移”帶來的缺點可能比長處還要多。例如,大多數運行在PersonalJava和J2ME個人環境(Personal Profile)上的基於AWT的J2SE利用程序不經過修正,直接遷移到移動設備上經常導致難以接收的性能和很差的可用性。為了建立成功的智能移動利用程序,開發者必需懂得移動設備和網絡的具體特征。

  作為Java開發者和架構職員,我們應當懂得移動開發的一些什麼樣內容?我們如何再次練習自己以適應新的事務?我們分析了移動利用程序開發中的重要挑釁,並討論了克服這些艱苦的最佳經驗。

  有限的設備硬件

  移動平台和PC平台之間最明顯的差別是用於處理的硬件。比起任何移動處理設備,目前的PC都擁有更快的CPU、更快的內存和更多的存儲空間。桌面和服務器開發者可以累贅編寫“浮腫的”的利用程序(例如微軟Office)的大批開銷,他們還能夠拜訪大型的、集成了大批功效的框架組件(例如J2SE平台本身)供給的豐富的用於提高效率的特征。但是,在移動設備上就完整不同了。有時CPU速度還不到20MHz、內存小於100KB,我們必需仔細地評估自己所需要的特征,徹底地優化代碼,在有限的框架組件支撐下工作。在這一部分我們將討論這些挑釁。

  1、輕量級的類庫

  初學者最廣泛的錯誤是“golden hammer”反模式(anti-pattern):為事務選擇了錯誤的技巧。在Java的世界中,軟件工具通常作為尺度的或第三方類庫中的可重復應用的對象存在。選擇占用最少的硬件資源、支撐必要的利用程序特征的最好的類庫是我們工作的要點。

  J2ME基礎和個人環境(也包含PersonalJava)在字節碼(bytecode)層次與J2SE是兼容的,並且它持續了J2SE核心API的一個很大的子集。在理論上,我們可以把J2SE程序庫(例如XML處理、加密、消息處理和UI)直接用於移動設備上。但是,假如這樣做就會下降J2ME的後果,導致緩慢的、浮腫的利用程序(它們只能安排在更昂貴的設備上)。在大多數情況中,我們應當選擇為移動設備特別設計的輕量級的類庫。通常多個有廠商在雷同的市場上競爭,每個廠商供給一個稍微不同的輕量級產品,著重於不同的特征。

  CLDC和MIDP尺度類庫都是從下向上設計的輕量級組件。但是,碰到需要選擇第三方類庫的時候,選擇准確工具的需求也實用於MIDP項目。對於特定的程序庫,廠商為大批的MIDP設備(例如SymBian OS設備)供給一個與J2SE兼容的API版本和另一個應用專用API的非常輕盈的版本。一般來說,後者占用的內存更少、性能更好,但是需要額外的練習並且程序的移植性也較差。MIDP輕量級類庫的例子有PointBase MIDP關系數據庫API和iBus//Mobile JMS客戶端API。

 2、減少利用程序占用的空間

  移動設備廣泛只有很少的內存和存儲空間,因此它請求我們同時優化利用程序的存儲和運行時所占用的空間。下面是我們的一些建議:

  · 優化程序打包(packaging)過程:盡管仔細地選擇了最好的輕量級類庫,但是我們仍然可以發明利用程序只應用了部分類庫。在程序打包過程中,我們應當只包含實際應用的類。對於小型類庫我們可以手動完成這種工作,對於大型類庫可以應用與一些J2ME IDE(例如IBM WebSphere Studio Device Developer)綁定在一起的主動化工具來完成。假如你希看進一步減少二進制利用程序的大小,你可以應用字節碼錯亂程序(obfuscator)把長變量名稱和類名稱調換為更短的、含意含混的名稱。

  · 分割利用程序:由於MIDP運行時只載進需要的類,我們可以把利用程序分成獨立的部分以減少運行時占用的空間。對於MIDP利用程序,MIDlet工具套件可以包含多個相對獨立的MIDlet。

  盡管尺度的MIDP規范並不支撐共享類庫,但是一些特定廠商的實現達到了這個目標。其中一個例子是BlackBerry手持設備的BlackBerry Java開發環境(JDE)。共享類庫進一步減小了總體占用的空間,由於不需要在每個利用程序中重復類庫。

 

  3、最小化無用單元收集過程

  Java的一個重要的長處是內建的無用單元收集器,它能夠主動地開釋無效對象應用的內存空間。這使得開發者可以把精力集中在核心邏輯上,而不用太關注內存治理的細節信息。其成果是,Java開發者一般不關心對象的創立。實際上,許多風行的Java設計模式進一步晉升了建立更多的對象來代替更多的可保護代碼的思想。

  但是,在移動設備上,由於可以應用的內存總量很少,無用單元收集器必需頻繁運行。當無用單元收集器運行的時候,它的線程占用可貴的CPU周期並減慢其它所有利用程序的過程。假如要建立高效的J2ME利用程序,我們必需使對象的建立減少到最小,並敏捷開釋不再應用的對象。我們的建議如下:

  · 在開發周期的早期階段仔細地檢查設計模式。例如,基於屏幕流程的方法就比傳統的MVC實現應用的對象少許多。

  · 在實現層簡明地重復應用已有的對象。例如,假如一個雷同的按鈕(例如“DONE”按鈕)呈現在許多屏幕上,我們就應當一次建立,多次應用。

  · 應用數組和StringBuffer(字符串緩沖)。數組比對象聚集速度更快、內存效率更高。當我們修正或連接字符串的時候,不可變的String對象導致應用大批的中間對象,而StringBuffer的效率高許多。

  · 在應用過後敏捷封閉網絡連接、文件句柄和記錄治理系統(RMS)記錄存儲。我們應當仔細地在文檔中找出close()、destroy()和 dispose()方法並且明智地應用它們。目前有一條大家一致認同的經驗:把這些方法都放在finally代碼塊中,以確保即使產生了運行時錯誤,這些資源也會被開釋出來:

try {
 HttpConnection c =(HttpConnection) Connector.open("http://someurl");
 InputStream is = c.openInputStream ();
 // 處理數據
} catch (Exception e) {
 // 處理異常
} finally {
 try {
  if ( c != null ) c.close();
  if ( is != null ) is.close();
 } catch (IOException ioe) { }
}

  · 應用本地類庫的時候開釋資源。在智能移動利用程序中,有時候為了得到更高的性能我們會拜訪本地類庫、受限制的功效(例如電話召喚)或本地UI的外表和感到(例如用於PocketPC的IBM SWT程序庫)。本地資源不屬於無用單元收集的范疇。在應用完一些資源以後,我們需要遵守適當的本地類庫(和它們的Java包裝類)的指令來開釋它們。

  4、應用移動進口(Portal)

  智能移動設備越來越強盛了。但是,在復雜的企業環境中,許多事務對於大多數移動設備來說還是對資源很敏感的。在這種情況下,廣泛的方法是建立一個進口服務器,移動設備可以委托它履行一些復雜的事務。移動中間件進口作為移動客戶端和企業後端服務器的橋梁。智能進口不僅僅是移動設備的代理或者代替。移動進口的應用包含:

  · 答應移動客戶端利用多種通信和消息傳遞協議。例如,移動消息處理服務器應當把很大范疇內的大批設備集成到共同的消息處理下部結構中。

  · 聚合後端服務並激活***(bundled)服務。例如,Oracle9iAS無線服務器為Oracle的SQL數據庫供給了J2ME SDK、基於推送(Push)的消息傳遞和基於地位的服務。BlackBerry企業服務器支撐BlackBerry MIDP設備對基於微軟Exchange或IBM Lotus Domino的協同信息系統的同一尺度的拜訪。

  · 為強盛的和復雜的後端服務供給簡略的移動界面。

  5、明智地應用設計模式

  沒有合適於任何環境的設計模式。例如,強盛的MVC和Fa?ade模式需要多個抽象層,對於簡略的利用程序來說可能太粗笨了。對於簡略的利用程序,我們可以缭繞屏幕設計全部邏輯。

 

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