Android性能優(yōu)化

Android性能優(yōu)化

布局優(yōu)化

Android UI渲染機(jī)制

人眼所感受到的流暢畫面,需要畫面的幀數(shù)達(dá)到40-60幀每秒;很多PC畫面黨應(yīng)該都了解,最佳fps大概在60fps左右也是評(píng)價(jià)一款顯卡的性能指標(biāo)之一;就比如你玩LOL英雄聯(lián)盟右上角的fps是多少,一般斗魚上主播的都在200以上,一般筆記本是40-100之間吧。

在Android中,系統(tǒng)通過VSYNC型號(hào)觸發(fā)對UI的渲染、重繪,期間各時(shí)間是16ms其實(shí)就是1000ms中顯示60幀畫面的單位時(shí)間,即1000/60。如果系統(tǒng)每次渲染時(shí)間都在16ms內(nèi)那么就不會(huì)有卡頓,如果超過,就會(huì)停止繪制,等待下一個(gè)信號(hào)才開始繪制,這樣就會(huì)出現(xiàn)卡頓。

  1. 優(yōu)化布局層級(jí):在Android系統(tǒng)中都是通過遍歷View數(shù)來繪制的,降低View樹的高度。早期Android默認(rèn)布局是LinearLayout,而現(xiàn)在是扁平化的RelativeLayout

  2. 避免嵌套過多的無用布局:選用適合的Layout,不要使用一種layout造成嵌套過多的情況。

  3. 使用<include>標(biāo)簽重用Layout:高效利用不解釋

  4. 使用ViewStub實(shí)現(xiàn)View的延時(shí)加載:
    viewstub標(biāo)簽同include標(biāo)簽一樣可以用來引入一個(gè)外部布局,不同的是,viewstub既不會(huì)繪制也不會(huì)占用位置,也不會(huì)初始化。兩種方法讓它顯示出來:

    • VISIBLE: 調(diào)用mViewStub.setVisibility(View.VISIBLE);
    • inflate:View inflateView = mViewStub.inflate();
  5. Hierarchy Viewer:工具優(yōu)化,用在模擬器上,自行百度

內(nèi)存優(yōu)化

什么是內(nèi)存?

  • 寄存器(Register):在CPU內(nèi)部,速度最快的存儲(chǔ)場所,開發(fā)者不可控制
  • 棧(Stack):放創(chuàng)建對象的引用,對象本身放在堆中
  • 堆(Heap):放new 創(chuàng)建的對象和數(shù)組,在堆中分配內(nèi)存,由Java虛擬機(jī)GC回收
  • 靜態(tài)存儲(chǔ)區(qū)域(Static Field):在固定的位置存放應(yīng)用程序運(yùn)行時(shí)一直存在的數(shù)據(jù),Java在內(nèi)存中專門劃分了一個(gè)靜態(tài)存儲(chǔ)區(qū)域來管理一些數(shù)據(jù)變量,例如靜態(tài)的變量
  • 常量池(Constant Pool):常量池中除了包含代碼中所定義的各種基本類型(如int、long等等)和對象型(如String及數(shù)組)的常量值外,還包含一些以文本形式出現(xiàn)的符號(hào)引用

所謂的內(nèi)存分析就是指分析Heap的大小,可由如下代碼所獲取。

    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    int heapSize = manager.getLargeMemoryClass();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評(píng)論 25 709
  • 注意事項(xiàng): 布局優(yōu)化;盡量使用include、merge、ViewStub標(biāo)簽,盡量不存在冗余嵌套及過于復(fù)雜布局(...
    HarryXR閱讀 5,352評(píng)論 1 19
  • 周星馳的電影《功夫》里面借火云邪神之口說出了一句至理名言:“天下武功,唯快不破”。 在移動(dòng)互聯(lián)網(wǎng)時(shí)代,同樣如此,如...
    lipy_閱讀 1,037評(píng)論 0 2
  • 本文同時(shí)發(fā)布在CSDN上,歡迎查看 1. 前言 隨著最近幾年移動(dòng)市場蓬勃發(fā)展,引來大批人員投入到Android、I...
    大圣代閱讀 5,228評(píng)論 7 44
  • 我一直覺得如果我的努力得不到回報(bào)就去死。這只是夸張說法。本義就是說,我覺得,我努力了一定會(huì)有回報(bào),如果沒有回報(bào)那就...
    六便士與TT閱讀 194評(píng)論 0 0

友情鏈接更多精彩內(nèi)容