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