Android性能優(yōu)化
布局優(yōu)化
Android UI渲染機制
人眼所感受到的流暢畫面,需要畫面的幀數(shù)達到40-60幀每秒;很多PC畫面黨應該都了解,最佳fps大概在60fps左右也是評價一款顯卡的性能指標之一;就比如你玩LOL英雄聯(lián)盟右上角的fps是多少,一般斗魚上主播的都在200以上,一般筆記本是40-100之間吧。
在Android中,系統(tǒng)通過VSYNC型號觸發(fā)對UI的渲染、重繪,期間各時間是16ms其實就是1000ms中顯示60幀畫面的單位時間,即1000/60。如果系統(tǒng)每次渲染時間都在16ms內(nèi)那么就不會有卡頓,如果超過,就會停止繪制,等待下一個信號才開始繪制,這樣就會出現(xiàn)卡頓。
優(yōu)化布局層級:在Android系統(tǒng)中都是通過遍歷View數(shù)來繪制的,降低View樹的高度。早期Android默認布局是LinearLayout,而現(xiàn)在是扁平化的RelativeLayout
避免嵌套過多的無用布局:選用適合的Layout,不要使用一種layout造成嵌套過多的情況。
使用<include>標簽重用Layout:高效利用不解釋
-
使用ViewStub實現(xiàn)View的延時加載:
viewstub標簽同include標簽一樣可以用來引入一個外部布局,不同的是,viewstub既不會繪制也不會占用位置,也不會初始化。兩種方法讓它顯示出來:- VISIBLE: 調(diào)用
mViewStub.setVisibility(View.VISIBLE);
- inflate:
View inflateView = mViewStub.inflate();
- VISIBLE: 調(diào)用
Hierarchy Viewer:工具優(yōu)化,用在模擬器上,自行百度
內(nèi)存優(yōu)化
什么是內(nèi)存?
- 寄存器(Register):在CPU內(nèi)部,速度最快的存儲場所,開發(fā)者不可控制
- 棧(Stack):放創(chuàng)建對象的引用,對象本身放在堆中
- 堆(Heap):放new 創(chuàng)建的對象和數(shù)組,在堆中分配內(nèi)存,由Java虛擬機GC回收
- 靜態(tài)存儲區(qū)域(Static Field):在固定的位置存放應用程序運行時一直存在的數(shù)據(jù),Java在內(nèi)存中專門劃分了一個靜態(tài)存儲區(qū)域來管理一些數(shù)據(jù)變量,例如靜態(tài)的變量
- 常量池(Constant Pool):常量池中除了包含代碼中所定義的各種基本類型(如int、long等等)和對象型(如String及數(shù)組)的常量值外,還包含一些以文本形式出現(xiàn)的符號引用
所謂的內(nèi)存分析就是指分析Heap的大小,可由如下代碼所獲取。
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
int heapSize = manager.getLargeMemoryClass();