簡單了解Android性能優(yōu)化方向及相關(guān)工具
開發(fā)一款性能優(yōu)良的應(yīng)用是每一個Android開發(fā)者都必須經(jīng)歷的挑戰(zhàn)。在移動端資源有限的前提下,提高應(yīng)用的性能顯得尤為重要。常見的提高APP性能的優(yōu)化方向有三個:布局和渲染優(yōu)化、內(nèi)存優(yōu)化、功耗優(yōu)化。
一:布局優(yōu)化
所謂布局優(yōu)化,就是盡量減少布局的嵌套層級,減少無用的布局。主要的優(yōu)化方法有:
(1)優(yōu)先使用RelativeLayout來減少布局嵌套層數(shù),否則盡量使用LinearLayout。這是因?yàn)镽elativeLayout能夠在不嵌套的情況下完成復(fù)雜的布局,而當(dāng)布局比較簡單時優(yōu)先使用LinearLayout提高性能。
(2)使用include標(biāo)簽來重用布局,使用merge標(biāo)簽來合并布局。
(3)使用ViewStub來實(shí)現(xiàn)視圖的動態(tài)加載,僅當(dāng)使用的時候才去加載它。
(4)精簡布局,刪除無用的布局等。
布局優(yōu)化常用的工具有:Hierarchy Viewer等。
二:渲染優(yōu)化
渲染優(yōu)化主要就是提高渲染的速度,避免過度繪制,從而減少畫面卡頓。主要優(yōu)化方法有:
(1)通過布局優(yōu)化減少布局層級,提高布局的繪制速度。
(2)當(dāng)同一幀的像素點(diǎn)被繪制多次時,就會產(chǎn)生過度繪制問題(OverDraw),導(dǎo)致資源被浪費(fèi),因此需要避免過度繪制。
(3)系統(tǒng)每16ms會發(fā)送一次同步信號,進(jìn)行UI渲染,如果每次都能渲染成功,就能使FPS達(dá)到60,從而使用戶感覺不到畫面卡頓。這就要求onDraw()方法中不能做耗時的邏輯。
繪制優(yōu)化常用的工具有:開發(fā)者選項里的GPU呈現(xiàn)模式分析、調(diào)試GPU過度繪制等。
三:內(nèi)存優(yōu)化
內(nèi)存優(yōu)化最主要的就是避免內(nèi)存泄漏。常見的內(nèi)存泄漏有:
(1)使用Static將屬性或控件定義為靜態(tài)的
1)在Activity類里有一個Activity的靜態(tài)成員變量引用了該Activity實(shí)例,由于靜態(tài)成員生命周期長,從而導(dǎo)致Activity實(shí)例需要被GC時由于該實(shí)例被引用導(dǎo)致無法被回收。解決方法為在Activity的onDestroy()方法里將該成員變量賦為Null。
2)如果View定義為靜態(tài)的,由于View持有Activity的context,同樣會造成內(nèi)存泄漏。解決方法為回收Activity實(shí)例時同時調(diào)用View的onDestroy()方法釋放該View。
(2)非靜態(tài)內(nèi)部類、匿名內(nèi)部類造成內(nèi)存泄漏
由于非靜態(tài)內(nèi)部類和匿名內(nèi)部類默認(rèn)持有外部類的強(qiáng)引用,當(dāng)內(nèi)部類的生命周期比外部類長時就會造成內(nèi)存泄漏。常見的例子比如Handler內(nèi)部類造成內(nèi)存泄漏等。解決方法為將內(nèi)部類定義為靜態(tài)的,因?yàn)殪o態(tài)內(nèi)部類沒有外部類的引用。如果內(nèi)部類要訪問外部類的成員,可以通過弱引用的方式。
常用的檢測內(nèi)存泄漏工具有:Leakcanary、MAT等。
四:功耗優(yōu)化
功耗優(yōu)化主要是減少應(yīng)用的耗電量,減少不必要的網(wǎng)絡(luò)請求等。
五:其他優(yōu)化
比如減小安裝包體積,在UI線程避免耗時操作等等。
六:其他優(yōu)化工具
IDE自帶的靜態(tài)代碼檢測工具、各種AndroidMonitor;jdk自帶的traceView等。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程實(shí)現(xiàn)全局獲取Context及使用Intent傳遞對象的方法詳解
這篇文章主要介紹了Android編程實(shí)現(xiàn)全局獲取Context及使用Intent傳遞對象的方法,結(jié)合實(shí)例形式分析了Android全局Context的獲取及Intent傳遞對象的具體操作方法,需要的朋友可以參考下2017-08-08Android仿淘寶頭條向上滾動廣告條ViewFlipper
這篇文章主要為大家詳細(xì)介紹了Android仿淘寶頭條向上滾動廣告條ViewFlipper,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05android通過藍(lán)牙接收文件打開時無法自動選擇合適的應(yīng)用程序
android 通過藍(lán)牙接收文件,從歷史傳輸記錄打開,無法自動選擇合適的應(yīng)用程序,比如video player打開.3gp、.mp4文件等等2013-06-06解決Android調(diào)用系統(tǒng)分享給微信,出現(xiàn)分享失敗,分享多文件必須為圖片格式的問題
這篇文章主要介紹了解決Android調(diào)用系統(tǒng)分享給微信,出現(xiàn)分享失敗,分享多文件必須為圖片格式的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Android使用Fragment實(shí)現(xiàn)兼容手機(jī)和平板的程序
這篇文章主要介紹了Android使用Fragment實(shí)現(xiàn)兼容手機(jī)和平板的程序,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-04-04