簡單瞭解Android效能優化方向及相關工具
開發一款效能優良的應用是每一個Android開發者都必須經歷的挑戰。在移動端資源有限的前提下,提高應用的效能顯得尤為重要。常見的提高APP效能的優化方向有三個:佈局和渲染優化、記憶體優化、功耗優化。
一:佈局優化
所謂佈局優化,就是儘量減少佈局的巢狀層級,減少無用的佈局。主要的優化方法有:
(1)優先使用RelativeLayout來減少佈局巢狀層數,否則儘量使用LinearLayout。這是因為RelativeLayout能夠在不巢狀的情況下完成複雜的佈局,而當佈局比較簡單時優先使用LinearLayout提高效能。
(2)使用include標籤來重用佈局,使用merge標籤來合併佈局。
(3)使用ViewStub來實現檢視的動態載入,僅當使用的時候才去載入它。
(4)精簡佈局,刪除無用的佈局等。
佈局優化常用的工具有:Hierarchy Viewer等。
二:渲染優化
渲染優化主要就是提高渲染的速度,避免過度繪製,從而減少畫面卡頓。主要優化方法有:
(1)通過佈局優化減少佈局層級,提高佈局的繪製速度。
(2)當同一幀的畫素點被繪製多次時,就會產生過度繪製問題(OverDraw),導致資源被浪費,因此需要避免過度繪製。
(3)系統每16ms會發送一次同步訊號,進行UI渲染,如果每次都能渲染成功,就能使FPS達到60,從而使使用者感覺不到畫面卡頓。這就要求onDraw()方法中不能做耗時的邏輯。
繪製優化常用的工具有:開發者選項裡的GPU呈現模式分析、除錯GPU過度繪製等。
三:記憶體優化
記憶體優化最主要的就是避免記憶體洩漏。常見的記憶體洩漏有:
(1)使用Static將屬性或控制元件定義為靜態的
1)在Activity類裡有一個Activity的靜態成員變數引用了該Activity例項,由於靜態成員生命週期長,從而導致Activity例項需要被GC時由於該例項被引用導致無法被回收。解決方法為在Activity的onDestroy()方法裡將該成員變數賦為Null。
2)如果View定義為靜態的,由於View持有Activity的context,同樣會造成記憶體洩漏。解決方法為回收Activity例項時同時呼叫View的onDestroy()方法釋放該View。
(2)非靜態內部類、匿名內部類造成記憶體洩漏
由於非靜態內部類和匿名內部類預設持有外部類的強引用,當內部類的生命週期比外部類長時就會造成記憶體洩漏。常見的例子比如Handler內部類造成記憶體洩漏等。解決方法為將內部類定義為靜態的,因為靜態內部類沒有外部類的引用。如果內部類要訪問外部類的成員,可以通過弱引用的方式。
常用的檢測記憶體洩漏工具有:Leakcanary、MAT等。
四:功耗優化
功耗優化主要是減少應用的耗電量,減少不必要的網路請求等。
五:其他優化
比如減小安裝包體積,在UI執行緒避免耗時操作等等。
六:其他優化工具
IDE自帶的靜態程式碼檢測工具、各種AndroidMonitor;jdk自帶的traceView等。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。