天天看點

[轉載]易于在各手機平台移植的設計

現在手機越來越普及了,手機上能實作的功能也越來越多,很多人開始轉入了手機上的應用開發,但是手機平台五花八門,如果想使開發出的程式具有較高的商業價值,就必須能夠适應較多數的手機平台,要充分考慮程式的可移植性,本人接觸手機應用開發已有近三年的時間,經曆了許多種手機平台的開發,如基于symbian OS的S60系列、UIQ系列,基于windows CE的Pocket PC系列、SmartPhone系列,還有如MTK、ADI、Philips等,對于工程的設計深有感觸,雖然經曆了不少失敗的教訓,但收獲也不小,這裡把這幾年的移植設計工作做一下總結,希望對于正在做移動應用開發的同業者有借鑒作用。在設計項目過程中主要要考慮如下幾個要領:

1、選擇易于移植的程式設計語言。目前在移動開發中使用的語言主流是J2ME和C語言,J2ME因為與平台無關,成為了首選的開發語言,但是用J2ME來開發,有些功能在某些手機平台上是無法實作的,有些手機平台根本就不支援J2ME的開發,是以我還是較傾向使用C語言,到目前為止,還沒有碰到不支援C語言的,雖然有些平台要求用C++來開發,但C++還是對C語言相容的,這裡我們就是針對C語言來講述如何開發易于移植的工程。

2、在程式架構設計上要針對使用異步函數的設計方法。調用某個函數,在函數退出時不能馬上知道結果,必須通過擷取系統傳回的消息才能知道函數調用結果,這樣的函數便是異步函數。是以在調用平台相關函數時要考慮到其可能是異步函數,可以設計一個事件或消息進行中心和一個逾時處理方法,把有調用平台相關的函數,全部在那兒進行處理,便于簡化處理流程。

3、對于基本資料類型和C語言基本标準函數要進行封裝。大部份平台都會有一套不同的基本資料類型定義和函數功能一樣但定義不同的C語言函數,特别是那些檔案操作,基本上都不支援C語言中的函數方法定義,但實作的功能是一樣的,是以可以通過宏定義或重定義進行封裝。

4、最好有一套獨立的記憶體管理程式。有些平台上的記憶體配置設定和釋放函數的實作較簡單,對于會産生較多記憶體碎片的程式可能會很快就無記憶體可用,有些平台上的一次能申請的最大記憶體可能無法滿足程式的需要,這時候就需要自己設計一套記憶體管理程式。

5、代碼設計時要考慮棧空間的大小。手機平台的程式可用棧空間一般都很小,一般不會超這8KB,函數的參數、局部變量、遞歸調用都是占用棧空間的,是以在手機平台中的系統函數很多都沒有帶參數,函數内局部變量當為數組變量時要注意數組長度,太長則容易造成棧溢出,一般不要超過128位元組,要盡量少用遞歸函數或遞歸函數的遞歸層次要少,還有函數調用太深也是容易造成棧溢出的。

6、最好不要有全局變量。目前隻知道symbian OS平台上應用程式不可以有全局變量(但可以有static const申明的全局常量),當然在symbian OS上要使用全局變量也是有方法的,不過,會有點麻煩,最好是不要有全局變量,如果确實需要全局變量,全局變量的數目應盡可能的少,并且要有一套對全局變量的統一管理方法。

7、要考慮到位元組對齊問題。大部分手機是4位元組對齊,是以在設計結構體資料類型時,結構體長度最好是4位元組的倍數,數組的長度也最好是4位元組的倍數,對于動态申請記憶體,最好不要申請小于4位元組長度的記憶體,否則會浪費記憶體。

8、要盡量節約記憶體的使用。在手機平台中可用的記憶體一般是在幾百KB左右,當然大部分智能手機(如symbian、windows CE手機)的記憶體能有幾兆的空間,對于記憶體的使用要有一個很好的規劃,在程式架構設計時就必須要考慮這方面的問題。

9、要考慮到位元組順序及字元集類型。大部分手機使用的字元集是UCS2字元,UCS2字元便有個高低位元組順序的問題,在處理UCS2字元時,如果發現處理後的字元亂掉了,那大部分原因是因為高低位元組順序錯了,但對于UTF8字元是不用考慮位元組順序的,很多系統采用了UTF8字元便是基于這方面的考慮。

10、          循環運算次數不要太大。有些系統會對循環運算進行監視,如果循環次數太大并造成運算時間太長,系統會發生重新開機的現象。

11、          一次的不間斷的處理過程時間不能太長。大部分低端的手機作業系統是單任務或搶占式多任務的,并且不支援多線程,如果某個不間斷的處理過程時間太長,則手機會因在這個長過程中無法處理其它事件造成象當機的樣子,這樣子,程式的互動性便會很差,最好把一個大過程分成一個個運作時間較短的小過程,每個小過程由UI層進行控制,這樣便可以及時響應和處理其它的事件。

12、檔案操作不能太頻繁。手機平台的系統資源有限,遠不能跟PC相比,頻繁地讀寫檔案可能會造成系統應付不過來而癱瘓掉,要盡量減少特别是對檔案的寫入操作。

13、          與平台相關的接口設計要盡量簡化。做移植主要工作量是在處理接口的設計上,接口設計得越簡單,接口數目越少,移植的工作量則越少。

14、要設計好程式調試方法。在手機平台上進行程式調試是一個較麻煩的工作,有些手機平台會提供模拟器進行調試,但最後還是必須到手機上去調試,是以調試的方法很重要,必須要有一套獨立的不依賴于平台的調試方法。

本文轉自peterzb部落格園部落格,原文連結:http://www.cnblogs.com/peterzb/archive/2009/05/16/1458503.html,如需轉載請自行聯系原作者。

繼續閱讀