Android性能優(yōu)化總結(jié)

性能優(yōu)化:

1. 卡頓優(yōu)化

  1. 繪制問題

    1. 布局復(fù)雜導(dǎo)致 -》 使用hierarchy viewer分析。減少嵌套層級(jí),使用ViewStub延遲繪制,去掉不必要的背景

      • 使用include、merge標(biāo)簽
      • 盡量不嵌套使用RelativeLayout
      • 在復(fù)雜布局界面使用ConstraintLayout
      • 使用ViewStub標(biāo)簽延遲初始化View
      • 去掉多余的background,少使用復(fù)雜shape
    2. 主線程耗時(shí)問題導(dǎo)致 -》使用profiler分析卡頓點(diǎn),采用異步的方式優(yōu)化

    3. 布局加載優(yōu)化。性能瓶頸主要在LayoutInflater.inflate()過程

      1. XmlPullParser涉及到IO操作,布局越復(fù)雜,IO耗時(shí)越長(zhǎng)
      2. createView涉及到反射,當(dāng)調(diào)用次數(shù)很頻繁的時(shí)候會(huì)有性能問題

      解決方案:

      • AsyncLayoutInflater
      • X2C 使用APT+JavaPoet技術(shù)做到編譯期將XML轉(zhuǎn)化為動(dòng)態(tài)加載視圖的Java代碼
  2. 內(nèi)存問題(問題根源是GC的時(shí)候stop the world導(dǎo)致所有線程掛起,出現(xiàn)卡頓問題)

    1. 減少內(nèi)存抖動(dòng),避免短時(shí)間內(nèi)大量創(chuàng)建與回收對(duì)象(如有需要,可以使用對(duì)象池的方式
    2. 使用leak canary分析,避免內(nèi)存泄漏問題
      1. 資源未關(guān)閉
      2. 注冊(cè)對(duì)象未釋放
      3. 內(nèi)部類持有外部類強(qiáng)引用導(dǎo)致泄漏
      4. handler問題
      5. 單例問題
      6. 靜態(tài)變量持有大數(shù)據(jù)對(duì)象
      7. ThreadLocal使用不當(dāng)引起泄漏
      8. 線程池問題,使用了Executors
    3. 內(nèi)存空間優(yōu)化
      1. 使用對(duì)象引用(強(qiáng)軟弱虛引用)
      2. 數(shù)據(jù)類型優(yōu)化(ArrayMap、SparseArray、Lrucache)
      3. Bitmap優(yōu)化
      4. 解析數(shù)據(jù)后存入緩存,不再每一次都重新解析一遍(具體表現(xiàn)是首頁(yè)卡片列表的json解析完成之后,會(huì)使用一個(gè)map存入內(nèi)存中,后面刷新的時(shí)候不再重新解析,直接使用內(nèi)存中的解析結(jié)果)

2. 啟動(dòng)優(yōu)化

  1. 啟動(dòng)時(shí)間測(cè)量:
    1. adb shell am start -W com.mymoney.sms/.ui.SplashActivity
    2. adb logcat | grep Displayed
  2. 添加startingwindow,啟動(dòng)的時(shí)候給Application設(shè)置一個(gè)背景
  3. application初始化的時(shí)候,進(jìn)行異步和延遲(IdleHandler)的改造
  4. 異步加載可能有一些SDK會(huì)依賴別的SDK,比如B的初始化依賴A先初始化,這個(gè)時(shí)候我們可以自己實(shí)現(xiàn)一個(gè)有序隊(duì)列,或者使用條件阻塞(CountDownLatch)
  5. 更深入的優(yōu)化:
    1. 安裝包重排布:讓啟動(dòng)階段需要的文件盡量排布在同一個(gè)dex中,減少io的開銷,從而達(dá)到提高性能的目的。主要包括類重排列(redex)和資源重排列(支付寶資源重排列
    2. 啟動(dòng)階段抑制GC:這個(gè)方案主要針對(duì)dalvik虛擬機(jī),art虛擬機(jī)對(duì)GC有做優(yōu)化,dalvik在查找無用對(duì)象的時(shí)候會(huì)掛起所有線程,art虛擬機(jī)這個(gè)過程是并發(fā)執(zhí)行的,所有這個(gè)優(yōu)化對(duì)art虛擬機(jī)收益不大,參考:支付寶客戶端架構(gòu)解析:Android 客戶端啟動(dòng)速度優(yōu)化之「垃圾回收」
    3. 針對(duì)5.0以下設(shè)備MultiDex的優(yōu)化,參考:面試官:今日頭條啟動(dòng)很快,你覺得可能是做了哪些優(yōu)化?

3. apk體積優(yōu)化

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

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