陸繼翔,李 映
(摩托羅拉移動南京研發(fā)中心,江蘇南京 211019)
Android應(yīng)用程序的性能優(yōu)化分析與研究
陸繼翔,李 映
(摩托羅拉移動南京研發(fā)中心,江蘇南京 211019)
針對從Android 2.3系統(tǒng)升級到Android 4.0系統(tǒng)應(yīng)用程序響應(yīng)速度慢的問題,提出了整體解決方案,優(yōu)化Android系統(tǒng)內(nèi)存管理設(shè)置,改進硬件資源,如顯示屏和觸摸屏等參數(shù)配置,調(diào)整應(yīng)用程序用戶界面布局結(jié)構(gòu),從而提升了Android應(yīng)用程序性能,增強用戶體驗。
Android;性能優(yōu)化;內(nèi)存管理
Android 4.0-冰淇淋三明治(ICS)是 Android系統(tǒng)智能手機,平板電腦的新版本。它統(tǒng)一智能手機和平板電腦系統(tǒng),將只有一個版本,同時支持智能手機、平板電腦,這將解決Android 3.x系統(tǒng)和Android 2.x操作系統(tǒng)版本分化的問題。開發(fā)者分別為平板電腦和智能手機開發(fā)的不同應(yīng)用也將可以在Android 4.0上通用。Android 4.0系統(tǒng)具有以下特性:Android統(tǒng)一版本;電視手機平板融合;全新設(shè)計的UI人性化體驗界面;回歸原點,保持開源特性;升級Linux內(nèi)核到3.0以上版本;音頻、視頻Play Store提供資源下載;針對多核處理器優(yōu)化;運行速度全面提升;集成Google電視和Chrome OS的智能停放;為OEM提供了官方的主題引擎;比擬GameCenter的游戲中心等。
由于Android 4.0操作系統(tǒng)有著卓越的用戶體驗和性能優(yōu)勢,很多手機用戶和運營商要求手機生產(chǎn)商對已上市手機提供升級包,從Android 2.3升級到Android 4.0操作系統(tǒng)。本文就摩托羅拉Android刀鋒智能手機軟件升級開發(fā)過程中遇到的應(yīng)用程序性能優(yōu)化的問題,給出了分析及解決方案。
測試部門報告顯示,刀鋒智能手機升級撥號應(yīng)用程序從Android 2.3到Android 4.0時,遇到了程序?qū)τ|摸事件反應(yīng)慢、反應(yīng)錯誤等問題。測試人員試圖在撥號應(yīng)用程序中用手指快速地點其中的數(shù)字按鍵,結(jié)果往往會退出當(dāng)前撥號應(yīng)用程序,而跳轉(zhuǎn)到最近通話應(yīng)用程序或電話簿應(yīng)用程序。最近通話應(yīng)用程序和電話簿應(yīng)用程序分別位于左右兩個相鄰的標(biāo)簽窗口。例如,他試圖快速撥打“8476518453”,結(jié)果會跳轉(zhuǎn)到最近通話應(yīng)用程序,用戶體驗欠佳,如圖1所示。
圖1 Android4.0撥號應(yīng)用程序界面
為了解決快速定位問題,本文采用比較分析法,嘗試在其他3個不同的軟件版本中來重現(xiàn)這個問題,并進行比較分析和定位。重現(xiàn)步驟定義:用戶持續(xù)來回點擊數(shù)字按鍵8和數(shù)字按鍵9,當(dāng)手指快速從數(shù)字按鍵8移動到數(shù)字按鍵9時,它們可能產(chǎn)生輕微的滑動手勢(從左至右)。在不同軟硬件版本上的測試結(jié)果見表1。
由表1測試結(jié)果可以發(fā)現(xiàn),Android 4.0的撥號應(yīng)用程序和最近通話應(yīng)用程序?qū)ο鄳?yīng)手指滑動支持是Android4.0新推出的功能,可以讓用戶很容易地在電話簿應(yīng)用程序、撥號應(yīng)用程序和最近通話應(yīng)用程序之間相互切換。所以Android 4.0系統(tǒng)將一些基于2個按鍵手指快速觸摸操作視為滑動事件,撥號應(yīng)用程序轉(zhuǎn)到下一個選項卡對應(yīng)的應(yīng)用程序;而Android 2.3系統(tǒng)則視為2個不同的觸摸或按鍵事件。
表1 不同軟硬件版本撥號應(yīng)用程序測試結(jié)果
為了驗證上述分析,本文使用了Android 4.0系統(tǒng)提供的系統(tǒng)開發(fā)輔助功能,選擇其中與用戶界面相關(guān)的2項:顯示觸摸操作和指針位置顯示。進入設(shè)置菜單→開發(fā)人員選項菜單→用戶界面→選擇指針位置和顯示觸摸操作。
指針位置:在屏幕上層疊加一層與當(dāng)前進程不沖突的顯示平面,以橫坐標(biāo)、縱坐標(biāo)交叉的定位方式,定位用戶手指在屏幕上劃過的軌跡來支持多點的坐標(biāo)位置顯示,如圖2所示。
顯示觸摸操作:為觸摸操作提供視覺提示,用渲染的大手指圖標(biāo)來顯示觸摸。如圖2所示。
圖2 指針位置和顯示觸摸操作
打開指針位置和顯示觸摸操作開發(fā)輔助功能后,在快速觸摸數(shù)字按鍵時,可以看到屏幕上顯示了一個連接2個觸摸點的藍(lán)線顯示(滑動指示),如圖3所示,從而驗證了本文的分析和判斷。
圖3 觸摸和滑動事件
基于上述分析,在大量閱讀Android 4.0源代碼,特別是Android用戶交互圖形事件的實現(xiàn),本文提出了一個整體解決方案,該方案結(jié)合了系統(tǒng)虛擬內(nèi)存動態(tài)配置,手機硬件參數(shù)調(diào)整和優(yōu)化并將應(yīng)用程序用戶界面的布局進行重組。下面將逐一展開闡述。
2.1 系統(tǒng)虛擬內(nèi)存大小重新配置
在Android系統(tǒng)中,build.prop和default.prop是相應(yīng)的設(shè)備配置文件,它們保存了一些系統(tǒng)級的設(shè)置和信息,如Android版本號、設(shè)備制造商名稱、網(wǎng)絡(luò)運營商名稱、設(shè)備CPU版本和顯示屏分辨率等。本文導(dǎo)出谷歌原生態(tài)Galaxy Nexus設(shè)備配置文件并與摩托羅拉刀鋒的設(shè)備配置文件進行比較,發(fā)現(xiàn)Android 4.0引入了新的虛擬內(nèi)存大小屬性配置,因而與之前Android 2.3虛擬內(nèi)存大小定義和配置相沖突。Android 4.0引入了一些新的虛擬內(nèi)存配置屬性(見表2)。
表2 Android 2.3和Android 4.0虛擬內(nèi)存配置屬性比較
由表2可以看出,dalvik.vm.heapsize在 Android 2.3和Android 4.0中有不同的含義。實際上Android 2.3的dalvik.vm.heapsize定義是對應(yīng)Android 4.0 的 Dalvik.vm.heapgrowthlimit[1]。升級代碼實現(xiàn)需要相應(yīng)的改變。Android 4.0的dalvik.vm.heapsize使用僅對應(yīng)于特殊情況:如果應(yīng)用程序配置文件AndroidManifest.xml中加上“Android:largeHeap=TRUE”,系統(tǒng)將在啟動和運行該應(yīng)用程序時使用此設(shè)置,從而給它提供超大虛擬內(nèi)存,像地圖或3D游戲等大型應(yīng)用程序。
刀鋒手機從Android 2.3升級到Android 4.0后,dalvik.vm.heapsize保持42M??梢酝ㄟ^運行命令行“adb shell getprop|grep heap”查看到對應(yīng)設(shè)置值。這樣某些第三方應(yīng)用程序在其Android-Manifest.xml定義“android:largeHeap=true”后,仍只能使用42M系統(tǒng)內(nèi)存,這將影響它運行時的流暢性和用戶相應(yīng)速度。例如Android 4.0自帶的移動應(yīng)用程序VideoEditorGoogle.apk就使用此屬性。
Android 4.0系統(tǒng)由于要支持多種硬件配置的設(shè)備,所以Android 4.0系統(tǒng)的源代碼提供了4種硬件配置所對應(yīng)的虛擬內(nèi)存大小設(shè)置參考文件:
高分辨率的智能手機虛擬內(nèi)存大小設(shè)置為phone-h(huán)dpi-dalvik-h(huán)eap.mk:[2]
配有512M內(nèi)存的高分辨率智能手機虛擬內(nèi)存大小設(shè)置為 phone-h(huán)dpi-512-dalvik-h(huán)eap.mk:[2]
配有1024M內(nèi)存的超高分辨率智能手機虛擬內(nèi)存大小設(shè)置為 phone-xhdpi-1024-dalvikheap.mk:[2]
普通平板電腦虛擬內(nèi)存大小設(shè)置為
刀鋒智能手機硬件配置是512M內(nèi)存的高精度分辨率智能手機,相應(yīng)地在刀鋒手機Android 4.0版本的實現(xiàn)中增加了內(nèi)存屬性dalvik.vm.heapstartsize和 dalvik.vm.heapgrowthlimit,參照 Android 4.0參考設(shè)置為:
并將系統(tǒng)缺省內(nèi)存大小配置從42M增加到48M,同時升級了內(nèi)存管理。
2.2 手機硬件參數(shù)調(diào)整和優(yōu)化
在Android系統(tǒng)里,有一些和硬件配置相關(guān)的參數(shù),通過對它們進行調(diào)整和優(yōu)化,確保手機的最佳整體性能。本文對觸摸屏和顯示屏參數(shù)進行了調(diào)整和優(yōu)化。
2.2.1 觸摸屏
Android系統(tǒng)中TOUCH_SLOP簡稱觸摸屏靈敏度,是在移動設(shè)備上基于識別一個運動的縮放像素密度距離,其數(shù)值越大越靈敏。我們發(fā)現(xiàn)在刀鋒Android 4.0軟件中TOUCH_SLOP值設(shè)置為8,而刀鋒Android 2.3軟件中設(shè)置為16。在分析手機快速觸摸正常工作日志和非工作日志后發(fā)現(xiàn),當(dāng)手指快速移動時,觸摸操作被系統(tǒng)作為手指滑動操作,系統(tǒng)進而觸發(fā)相應(yīng)的拖動動作處理。增加TOUCH_SLOP值將提高門檻,從而可降低這種事情誤處理的發(fā)生,同時也參考谷歌原生態(tài)Nexus手機的TOUCH_SLOP值,因為它是xhdpi超高精度分辨率設(shè)備,所以TOUCH_SLOP值設(shè)置為32。刀鋒手機是hdpi高精度分辨率設(shè)備,所以建議刀鋒手機TOUCH_SLOP值設(shè)置為16。這樣可以在大部分情況下避免不必要的滑動事件。
2.2.2 顯示屏
在Android系統(tǒng)中,參數(shù) windowsmgr.max_events_per_sec定義是Android窗口管理器可以在1s內(nèi)處理的事件總量。如果總事件數(shù)超過此門限值,一些超過的事件將不會被窗口管理器處理。
谷歌原生態(tài)的Nexus手機在系統(tǒng)配置文件中沒有設(shè)置“windowsmgr.max_events_per_sec”值(可以運行命令行“adb shell getprop”),通過閱讀源代碼,發(fā)現(xiàn)它使用了系統(tǒng)默認(rèn)值,即Android窗口管理器每秒處理90個事件。Android 4.0代碼注釋給出了這個缺省值設(shè)置的一些解釋:“考慮到實際事件發(fā)生率之間的不連續(xù)性,事件發(fā)生的異步性,或事件源源不斷持續(xù)發(fā)生而事件處理的不同步性,建議Android窗口管理器每秒處理的總事件數(shù)設(shè)為屏幕刷新率的1.5倍。理想情況下,會使用Display.getRefreshRate(),系統(tǒng)使用‘60’作為默認(rèn)假設(shè)刷新率。”
現(xiàn)在谷歌Nexus手機的顯示屏刷新率是60Hz,和刀鋒手機相同。在Android 4.0源代碼的注釋中,筆者在刀鋒手機的配置文件中把 windowsmgr.max_events_per_sec值從70增加到90。因此,窗口管理器將及時處理更多的交互事件,從而使得刀鋒手機對用戶輸入事件響應(yīng)更快。
2.3 應(yīng)用程序用戶界面布局重組
通過閱讀和比較Android 4.0撥號應(yīng)用程序的源程序和刀鋒手機撥號應(yīng)用程序的源程序,筆者發(fā)現(xiàn),Android 4.0撥號應(yīng)用程序用戶界面是2層布局,12個按鍵和應(yīng)用窗口,而刀鋒手機撥號應(yīng)用程序布局較為復(fù)雜,增加了12個按鍵之間的空白部分UI布局(如圖4和圖5所示),這樣用戶在使用撥號程序時有可能觸摸到這些空白部分,造成撥號應(yīng)用程序不能響應(yīng)觸摸事件。而在Android 4.0 Nexus手機上是不會發(fā)生的。因此,筆者刪除了12個按鍵之間空白部分UI布局,并簡化了應(yīng)用程序用戶界面,進行布局重組,從而使應(yīng)用程序執(zhí)行效率得到了相應(yīng)的提高。
由于本文工作只針對刀鋒手機的平臺實現(xiàn)了性能優(yōu)化,因此下一步工作將著眼于更加普適性的優(yōu)化工作,將其他一些手機平臺上特性整合到優(yōu)化方案中,從而實現(xiàn)在更廣泛的平臺上均得到Android性能的提升,增強用戶體驗。
圖4 谷歌Nexus智能手機的撥號應(yīng)用程序用戶界面
圖5 刀鋒智能手機的撥號應(yīng)用程序用戶界面
[1]谷歌公司.Android 4.0的兼容性定義[EB/OL].(2012-01-25)[2012-10-12].http://source.android.com/compatibility/4.0/android-4.0-cdd.pdf.
[2]谷歌公司.Android 4.0源代碼[CP/OL].(2012-02-04)[2012-11-19].http://code.google.com/p/android.
The Analysis of Android Application Performance Optimization
LU Jixiang,LI Ying
(Motorola Mobility Nanjing Software Center,Jiangsu Nanjing,211102,China)
It analyzes sluggish problems at upgrading applications from Android 2.3 to Android 4.0,gives the solution to improve applications performance from synergy way,optimizes the system memory configuration,display hardware and touch hardware parameters.This improves the Android application performance.
Android;Performance Optimization;Memory Management
TP319
A
2095-509X(2013)03-0082-04
2012-12-07
陸繼翔(1973—),男,江蘇南京人,摩托羅拉移動南京研發(fā)中心高級研發(fā)經(jīng)理,碩士,主要研究方向為智能手機應(yīng)用框架和系統(tǒng)。