Android性能優(yōu)化
布局優(yōu)化
Android UI渲染機(jī)制
人眼所感受到的流暢畫面簿透,需要畫面的幀數(shù)達(dá)到40-60幀每秒炕横;很多PC畫面黨應(yīng)該都了解滤愕,最佳fps大概在60fps左右也是評價(jià)一款顯卡的性能指標(biāo)之一茎刚;就比如你玩LOL英雄聯(lián)盟右上角的fps是多少质帅,一般斗魚上主播的都在200以上,一般筆記本是40-100之間吧黔牵。
在Android中聪轿,系統(tǒng)通過VSYNC型號觸發(fā)對UI的渲染、重繪猾浦,期間各時間是16ms其實(shí)就是1000ms中顯示60幀畫面的單位時間陆错,即1000/60。如果系統(tǒng)每次渲染時間都在16ms內(nèi)那么就不會有卡頓金赦,如果超過音瓷,就會停止繪制,等待下一個信號才開始繪制夹抗,這樣就會出現(xiàn)卡頓绳慎。
優(yōu)化布局層級:在Android系統(tǒng)中都是通過遍歷View數(shù)來繪制的,降低View樹的高度漠烧。早期Android默認(rèn)布局是LinearLayout杏愤,而現(xiàn)在是扁平化的RelativeLayout
避免嵌套過多的無用布局:選用適合的Layout,不要使用一種layout造成嵌套過多的情況已脓。
使用<include>標(biāo)簽重用Layout:高效利用不解釋
-
使用ViewStub實(shí)現(xiàn)View的延時加載:
viewstub標(biāo)簽同include標(biāo)簽一樣可以用來引入一個外部布局珊楼,不同的是,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虛擬機(jī)GC回收
- 靜態(tài)存儲區(qū)域(Static Field):在固定的位置存放應(yīng)用程序運(yùn)行時一直存在的數(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();