性能優(yōu)化在一款產(chǎn)品的迭代過程中非常重要;程序?qū)崿F(xiàn)了功能、還原產(chǎn)品原型只能保證程序能用,但如果要讓用戶更愿意使用,產(chǎn)品得好用。試想一下如果你開發(fā)的產(chǎn)品啟動慢、頁面顯示需要長時間轉(zhuǎn)圈加載、頁面切換卡頓、黑白屏、用一會機器就發(fā)燙、耗內(nèi)存、OOM、程序切換到后臺后占用內(nèi)存無法釋放......,這些問題就像正在玩游戲時彈出提示框這類糟糕的用戶體驗一樣讓用戶惱火,如果用戶不得不使用你的產(chǎn)品,可能還會一直忍受;但如果有很多同類競品,糟糕的用戶體驗會大大影響留存率。有時候產(chǎn)品在市場上的表現(xiàn)差,真不能全怪產(chǎn)品和運營,程序體驗問題也是很大一部分原因。
但大部分產(chǎn)品并沒有足夠重視性能問題,隨便打開一個應(yīng)用,即使是大廠出品,也極大可能存在過渡繪制和內(nèi)存泄露的問題;也有可能是開發(fā)人員意識到了程序存在性能問題,但完成迭代就夠忙的了,哪有時間去做這類不能體現(xiàn)績效的事情。其實在越來越重視體驗,同類產(chǎn)品競爭越來越激烈的環(huán)境下,對于開發(fā)人員來講,只完成迭代,把功能做完遠(yuǎn)遠(yuǎn)不夠,最重要的是把產(chǎn)品做好,讓更多人愿意使用。重視性能問題,優(yōu)化產(chǎn)品的體驗,比改幾個無關(guān)痛癢的bug會有價值得多。
網(wǎng)上能夠找到很多關(guān)于性能優(yōu)化很有價值的參考資料(詳見文末),包括騰訊、阿里、魅族、豌豆莢、小米、UC等知名互聯(lián)網(wǎng)公司都做過關(guān)于APP性能優(yōu)化的分享,如果你專注于應(yīng)用開發(fā),并且想做一款備受歡迎的產(chǎn)品,性能優(yōu)化是你進(jìn)階路上必須去學(xué)習(xí)和實踐的。
溫馨提示:為獲得更好的閱讀體驗,請點擊閱讀原文查看。
本文重點介紹谷歌官方提供的一系列應(yīng)用性能優(yōu)化工具以及值得推薦的第三方性能優(yōu)化工具,這些工具主要集中在如下幾個地方:
開發(fā)者選項:GPU呈現(xiàn)模式分析、GPU過渡繪制、嚴(yán)格模式、應(yīng)用無響應(yīng)ANR等;
IDE中:Android Studio,比如靜態(tài)代碼檢測工具、Memory Monitor、CPU Monitor、NetWork Monitor、GPU Monitor、Layout Inspector、Analyze APK等;
SDK中:sdk\tools,比如DDMS、HierarchyViewer、TraceView等;
第三方性能優(yōu)化工具:MAT、Leakcanary等;
Android Studio是谷歌官方提供的集成開發(fā)環(huán)境(后面簡稱AS),同樣作為Android集成開發(fā)環(huán)境的Eclipse很好用,但AS更高效、順手、便捷,這在沒有使用AS之前是無法感受到的。AS不僅提供了程序開發(fā)、構(gòu)建、調(diào)試的環(huán)境,還提供了一系列優(yōu)化應(yīng)用質(zhì)量的工具,這些工具包括靜態(tài)代碼檢測工具Inspect Code、Android Monitor、Analyze APK...,同時還集成了Android Device Monitor。通過這三個工具基本上可以檢測、分析、定位大部分Android應(yīng)用的性能問題。
AS中的Insepct Code是用于對代碼進(jìn)行靜態(tài)質(zhì)量分析的工具,它是lint的增強版,可以檢測出來很多潛在的問題,同時給你提供改善建議;它不僅可以對整個工程、某個module、某個文件進(jìn)行所有規(guī)則的代碼靜態(tài)質(zhì)量檢測,還可以針對某一項規(guī)則對整個工程進(jìn)行檢測:
在Inspection窗口的左側(cè),有提供了一系列快捷按鈕用于快速分析、定位、修復(fù)代碼中的問題:
打開Settings的Inspections選項,可以看到這個工具能夠檢測出很多關(guān)于Java和Android方面的性能問題,比如布局導(dǎo)致的過渡繪制、在onDraw方法中創(chuàng)建新的實例、Handler內(nèi)部類導(dǎo)致的潛在內(nèi)存泄露、使用SparseArray代替HashMap的建議、布局層次太深、TypedArrays和VelocityTrackers沒有調(diào)用recycle方法導(dǎo)致的內(nèi)存泄露、存在沒有使用的資源文件、系統(tǒng)方法取代自定義實現(xiàn)功能代碼塊的建議、IO操作導(dǎo)致的內(nèi)存泄露問題、String和StringBuilder的相互替換等等;隨著AS的不斷更新,這個功能在不斷完善,最新的AS版本中,很多代碼層面的問題都能夠被檢測出來。
通過這個工具可以刪掉無用資源,檢測出明顯的性能問題,以及對代碼可讀性和性能方面的建議,使用起來很簡單,建議每天作為日常,提交代碼前都檢測一次,這比在持續(xù)集成過程中,使用sonar等代碼質(zhì)量工具分析更方便。
更多關(guān)于Inspect Code的描述參見:
(1) Inspection Tool Window
(2) Android Studio提高代碼質(zhì)量必殺技:Inspact Code
Andorid Monitor提供了一系列的性能檢測工具,通過它可以幫助你剖析應(yīng)用的性能,以便優(yōu)化、調(diào)試和改善應(yīng)用各方面的性能問題;Android Monitor可以從如下幾個方面對真機/模擬器中正在運行的程序進(jìn)行性能監(jiān)控:
(1)Log日志,包括系統(tǒng)日志和自定義日志;
(2)實時監(jiān)控內(nèi)存、CPU、GPU的使用情況;
(3)實時監(jiān)控網(wǎng)絡(luò)流量的消耗(只適合于真機);
(4)采集運行時信息并保存為文件,供工具分析;
通過Logcat日志窗口可以查看系統(tǒng)事件以及程序自定義的日志信息,比如GC消息、程序運行時異常日志、當(dāng)前啟動應(yīng)用的包名及入口等;它不僅提供了實時查看設(shè)備日志信息的功能,還有一段時間的日志緩存;同時提供了按照搜索(支持正則表達(dá)式)、按照等級/自定義標(biāo)簽/指定包名篩選日志的功能,以幫助你快速定位問題。
Logcat窗口是以行為單位對日志進(jìn)行緩存,當(dāng)窗口中的緩存日志超過指定的行數(shù)上限時,會刪掉最先緩存的日志。如果你覺得窗口中的日志緩存清除太快了,不便于跟蹤問題,可以在AS安裝目錄下的"bin/idea.properties"文件中增加“idea.cycle.buffer.size=你想緩存的行數(shù)”來調(diào)整窗口給的日志緩存行數(shù),但建議不要調(diào)得太高,否則會嚴(yán)重影響AS的體驗,緩存行數(shù)越多AS就會越卡,控制在5000行以內(nèi)已經(jīng)基本滿足需求了。
在程序中使用Log類打印日志時,TAG的長度建議不要超過23個字符,否則會做截斷處理,影響問題的準(zhǔn)確跟蹤。
Logcat窗口的左側(cè)有一列工具快捷按鈕,方便我們快速找到我們需要的信息:
內(nèi)存監(jiān)控窗口:Memory Monitor
CPU監(jiān)控窗口:CPU Monitor
GPU監(jiān)控窗口:GPU Monitor
網(wǎng)絡(luò)流量監(jiān)控窗口:Network Monitor
HPROF查看和分析工具:HPROF Viewer and Analyzer
內(nèi)存分配跟蹤工具:Allocation Tracker
函數(shù)調(diào)用棧分析工具:Method Tracer
查看系統(tǒng)信息工具:System Information
Analyze APK...:
TraceView:正確使用Android性能分析工具——TraceView
HierarchyViewer:Android UI 優(yōu)化——使用HierarchyViewer工具
MAT:Android 性能優(yōu)化之使用MAT分析內(nèi)存泄露問題
LeakCanary:LeakCanary 中文使用說明
Android Performance Patterns
Android性能優(yōu)化典范
Speed up your app(中文版)
Android客戶端性能優(yōu)化(魅族資深工程師毫無保留奉獻(xiàn))
Android應(yīng)用內(nèi)存泄露分析、改善經(jīng)驗總結(jié)
內(nèi)存泄露從入門到精通三部曲之基礎(chǔ)知識篇
內(nèi)存泄露從入門到精通三部曲之排查方法篇
內(nèi)存泄露從入門到精通三部曲之常見原因與用戶實踐
awesome-android-performance
聽云應(yīng)用性能管理大講堂歷屆講師課件匯總
Infoq演講:Android內(nèi)存優(yōu)化
Infoq演講:移動開發(fā)網(wǎng)絡(luò)性能優(yōu)化實踐
Infoq演講:移動應(yīng)用性能揭秘
Infoq演講:安卓開發(fā)中動畫效果的實現(xiàn)和優(yōu)化
Infoq演講:Android淘寶客戶端用戶體驗優(yōu)化實踐
阿里技術(shù)沙龍:小米系統(tǒng)性能的優(yōu)化
阿里技術(shù)沙龍:豌豆莢的性能優(yōu)化簡介
Android性能測試工具匯總
專注Android開發(fā),歡迎關(guān)注!
聯(lián)系客服