摘要:分析了手機應用運行環境的特點,并針對這些特點提出相應的對策;同時,針對手機中應用程序顯示區域小,CPU處理速度和內存容量限制,應用程序的實時性要求和開發環境的封閉性等特點,提出了一些設計策略和解決方案。
關鍵詞:手機;應用軟件;設計;對策
0 引言
用戶在使用手機中無時無刻不在和手機上的應用程序打交道,手機應用程序設計得好壞直接影響用戶對該款手機的感受。手機的應用程序的好壞決定了一款手機的內在品質,從而在很大程序上決定了一款手機在市場上的命運。本文結合筆者開發手機應用程序的經驗,探討手機上應用軟件的設計和開發方法。
1 手機應用軟件的特點分析
目前市場上的手機分兩類:功能手機(Feature Phone)和智能手機(Smart Phone)。雖然這兩類手機還沒有一個明確的界線,但是手機上運行的應用程序都有如下特點:
顯示區域小為了方便攜帶和按鍵,大屏的像素點為128x160、160x24、240x320等。
CPU處理速度和內存容量比段小基于成本的考慮,手機上的處理器(MCU)的頻率較低,一般只有幾十M,智能手機稍高,一般200—400M。內存(RAM和FLASH)一般為8M,16M,智能手機一般32M,64M。
和移動網絡的交互密切,實時性強能與移動網絡隨時隨地通信,交換語音和數據信息。對于來自移動網絡的來電,短消息,彩信,推消息(Push message)等,應用程序必須能及時提示用戶,并能讓用戶方便地處理這些信息。這一點也是手機產品和其他的PDA,PMP等產品的最大區別,同時對這些信息的處理也是手機軟件設計和開發的關鍵點和難點。
軟件的開發環境千差萬別,因而手機應用程序的運行環境相差甚遠現在市場上的手機的開發環境要么是手機的芯片開發商提供,要么是獨立的軟件公司提供,還沒有一個統一的開發標準。各個平臺的軟硬件環境差別很大,在一個平臺上的應用程序根本不能在另外一個平臺上運行。手機應用軟件開發和平臺緊緊地綁定在一起,軟件的可移植性極差。
2 手機應用軟件設計和開發的對策
針對上述手機應用軟件的特點,在進行手機應用軟件設計和開發的時候必須有清醒的認識,并預先有相應的解決方案,在項目進行到中間或者最后才發現或者考慮這些問題為時太晚。下面是筆者認為在手機應用軟件設計和開發上總體需要把握好的關鍵點。
2.1怎樣應對應用程序顯示區域小
應用程序的界面風格應一致。好的做法是設計一個共用的應用程序的基類(接口),所有的應用程序都從這個基類(接口)繼承;設計一組公共的顯示控件,這些控件的顯示風格可以通過配置文件進行設置。這樣可以很方便地達到“換膚”的功能,從而滿足用戶界面上個性化的需求。
多用圖標和簡潔文字來表達界面的含義。由于顯示區域的限制,手機很難像PC那樣利用多重窗口,基本上是一個應用程序占用整個窗口。采用統一的圖標和簡潔的文字能達到界面意義明確,表達意義形象的目的,這比冗長的文字更能吸引人的注意,使人記憶深刻,從而給用戶良好的使用體驗。如果能結合富有表現力的動畫圖片更好。因此,必須設計的圖形控件有:應用窗口類,圖片類,動畫類,圖片標簽類,進度條類,單行列表類,多行列表類,單選列表類,多選列表。在手機應用窗口中應該充分利用這些類來設計有特色的用戶界面。
設計一個通用的合理的輸入法接口。輸入法的設計在手機應用程序中有重要的地位。輸入法的設計在實現的時候要考慮的實際問題有:
(1)怎么方便地切換各種輸入。例如,可以考慮用#,*鍵來切換各類文字的輸入。另外,標點字符和數字等由于使用的頻率很高,可以考慮增加快捷菜單或者快捷鍵操作的輸入方法。
(2)待選字符的安排是否合理,操作是否方便。例如圖1所示界面是筆者設計的中文編輯界面。

圖1 中文編輯界面
說明:如果用戶輸入xyz所在的按鍵。則在區域1顯示所有的待選拼音/筆畫。在這個時候用戶可以按左右方向按鍵來選擇待選拼音/筆畫。用戶按OK鍵,在區域2,高亮(Highlight)顯示的是第一個待選漢字。這時按左右按鍵高亮光標在待選漢字間移動。如果漢字太多,可以按上下按鍵來在前一頁和后一頁漢字之間切換。按OK鍵,高亮選定的漢字將被輸入到編輯界面上。在區域3,是區域2高亮漢字的聯想詞組。用戶可以長按1-9鍵將顯示的詞組直接輸入到編輯界面(不需要高光選擇)。短按一次取消鍵(C鍵)刪除編輯界面的一個漢字,快速短按兩次,刪除編輯界面的一行漢字,長按取消鍵,全部刪除編輯界面的漢字。
上面舉的例子只是中文的輸入,實際情況是還需要英文字母,英文單詞,標點符號等字符的輸入。所以,輸入法的軟件設計的細節問題很多,各個應用的需求千差萬別,需要我們在開始設計軟件時充分考慮輸入法接口的可擴展性和靈活性。
2.2怎樣應對CPU處理速度和內存容量的限制
設計或者選定一個合理而高效的系統架構。好的應用程序需要一個好的系統框架。針對手機的CPU和內存的特點,手機的應用程序的運行環境和PC上的程序運行環境有很大的不同,用表1總結如下:

通過上面的對比,可以看出,手機的設計應注意以下幾點:
(1)以當前手機的硬件為基準,采取適度超前的原則來定義系統架構。整個架構不必大而且全,要小而精,并盡量做到架構中的各個部件具有很好的可裁減性。這樣的系統架構才能滿足各種不同的硬件需要。
(2)精心設計架構中的每一個部件,消除系統冗余的代碼;合理定義接口,系統的架構才能清晰容易被人理解,并且系統的可靠性也高。只有這樣,整個系統架構的代碼占用的內存少,應用程序在運行的時候占用的內存和CPU資源少。
(3)應用程序可以在PC上模擬運行。一般手機上調試應用程序的過程比較復雜,如果一個很小的改動都要到手機上去調試很浪費時間,同時,在PC上調試程序也比在手機上調試程序方便得多。一個好的程序架構的基本要求是絕大部分的應用都可以在PC機上模擬開發完成。
精心設計應用程序。應用程序的執行效率和應用程序的設計密切相關。對于手機上的應用程序,不同的設計策略有不同的結果。例如:對于一個電話本的應用程序,讀取所有電話記錄至少有兩種方法:一種是在一開機的時候就讀;另外一種是在電話本應用打開的時候才讀。實際情況是前一種情況較好,因為,這樣用戶每次進入電話本的時候手機可以很快地顯示所有的電話記錄,后者則慢得多,在有些系統中可能是難以忍受,必須提前準備好數據。
在設計應用程序中著重考慮的問題有:
(1)程序的處理效率是否高;
(2)程序的內存占用和CPU是否太多;
(3)用戶的操作是否方便,應用的響應速度是否足夠快;
(4)界面的定義是否美觀,和系統的總體風格相一致;
2.3怎樣應對應用程序的實時性要求
手機最重要的功能是通話和通信。這些一般和無線網絡都有密切的關系。對于來自無線網絡的來電,短消息,推消息等,必須有一個應用來統一調度和處理這些消息和信息。筆者稱之為待機管理應用。待機管理應用是底層軟件和其他應用程序的調度員,同時它也負責待機界面下的界面顯示和其他應用不方便處理的一些任務。如果用圖來表示,那么它在整個系統中的位置如圖2所示。

待機管理應用的特點是:(1)一開機就首先運行;(2)總是處于運行或者待命狀態,不會退出。
因此,這個應用的穩定性要求就特別高。在軟件設計的時候要特別注意功能劃分,如果某項功能能在其它的應用中處理,該功能應盡量分到別的應用中去,以免待機管理過于復雜,影響系統的穩定性。
待機管理應用的功能一般如下:
(1)處理與充電器和電池有關的消息。例如:插入充電器,如果是在開機,則在待機下顯示充電動畫;拔掉充電器,關閉充電動畫的顯示等;
(2)處理開機動畫或者問候語的顯示;
(3)如果底層協議報告SIM卡設置了PIN碼,啟動SIM卡的PIN碼輸入界面;如果還設置了手機密碼,則啟動手機的密碼輸入界面;
(4)顯示待機下面的各種狀態圖標,網絡注冊的信息,時間和日期信息,各種應用圖標的排列;
(5)顯示屏幕保護的界面;
(6)處理用戶在待機狀態下的各種按鍵操作,例如:如果用戶短按了數字1所在的按鍵,則要啟動號碼編輯應用或者界面,如果用戶在應用圖標或者菜單中按或者點擊了某一個應用,則要啟動該應用;
(7)顯示各種系統狀態,例如:未接來電和短消息的提示,電池電量不足的提示,鬧鐘的提示等;
(8)轉發底層的各種消息給相應的應用程序,為其他的上層應用提供統一、簡潔的接口。這樣做的原因是通過對底層消息的封裝和轉換,能簡化其他應用處理。并且使待機管理應用能及時了解系統當前的狀態,并及時通知給用戶。
2.4怎樣應對應用程序的開發環境的封閉性
正如上面提到的,現在市場上主流的手機開發平臺很多,并且還不斷有新的平臺涌現,怎樣開發能在各種不同的平臺上有很強移植性的應用程序對程序設計和開發人員是一個艱巨的任務。筆者結合自己的經歷認為可行的思路如下:
(1)應用的用戶界面和實際的處理邏輯盡量分開,將一些可以共用的處理邏輯提煉成共用的函數接口。例如:日程應用的陰陽歷轉換算法,電話本中的首字母查找算法等都可以放在一個單獨文件或者庫文件中,這樣的代碼可以很方便地移植到其他的平臺上。
(2)編寫代碼的時候,數據結構的定義和函數的處理要考慮不同硬件平臺的差別。一個好的做法是定義一個平臺上通用的數據類型定義,而不是直接使用設計語言里面原始定義的數據類型。例如:如果是在C/C++的開發平臺上,我們可以定義一個文件types.h,它里面包含如下通用類型的定義:
typedef char BOOLEAN;
typedef unsigned char BYTE;
typedef char CHAR;
typedef unsigned short WCHAR;
typedef char INT8;
typedef unsigned char UINT8;
typedef shOrt INTl6;
typedef unsigned short UINT16;
typedef long INT32;
typedef unsigned long UINT32;
typedef long LONG;
typedef unsigned long ULONG;
在程序中,所有數據結構的數據項,函數的參數和返回值,類的成員數據都用上面的這些通用類型,這樣編寫的軟件的可移植性就可以大大提高。
如果可能,多采用成熟的第三方軟件或者知名的開源代碼庫。
手機的應用經常碰到部分模塊是自己開發還是采用第三方軟件的問題。為了軟件的可移植性,加快軟件的開發速度,這些模塊應該多采用專業公司開發的成熟軟件或者采用穩定的開源軟件。這比自己重新開發好、快捷方便得多,開發成本也比較少。例如:現在很多手機都支持MP4播放,這樣就涉及音視頻編解碼的問題,如果可能,選擇一個經過市場驗證,可移植性強的第三方或者開源的音視頻編解碼庫比自己進行開發要合算得多,這樣的應用程序的可移植性比自己在特定平臺上全部由自己開發的應用程序要好。
3 結束語
手機上的應用程序開發環境現在還是一個比較封閉,與應用程序耦合比較緊密的系統;應用程序的設計和開發相對復雜,對應用的穩定性,安全性,實時性要求也比較高。無論是對手機系統平臺的設計人員還是開發人員,只有在了解其特點的基礎上才能提出有針對性的方案。本文指出了這些特點并闡述了筆者的觀點,希望能起到拋磚引玉的作用。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。