Android 性能優(yōu)化:手把手教你優(yōu)化Bitmap圖片資源的使用

前言

  • 在 Android開(kāi)發(fā)中,性能優(yōu)化策略十分重要
  • 本文主要講解性能優(yōu)化中的Bitmap 使用優(yōu)化,希望你們會(huì)喜歡

目錄

1.png

1. 優(yōu)化原因

即 為什么要優(yōu)化圖片Bitmap資源,具體如下圖:


1.png

2. 優(yōu)化方向

本文將從 以下方面優(yōu)化圖片Bitmap資源的使用 & 內(nèi)存管理


1.png

3. 具體優(yōu)化方案

下面,我將詳細(xì)講解每個(gè)優(yōu)化方向的具體優(yōu)化方案


1.png

3.1 使用完畢后 釋放圖片資源

  • 優(yōu)化原因
    使用完畢后若不釋放圖片資源,容易造成內(nèi)存泄露,從而導(dǎo)致內(nèi)存溢出
  • 優(yōu)化方案
    a. 在 Android2.3.3(API 10)前,調(diào)用 Bitmap.recycle()方法
    b. 在 Android2.3.3(API 10)后,采用軟引用(SoftReference)
  • 具體描述
    在 Android2.3.3(API 10)前、后,Bitmap對(duì)象 & 其像素?cái)?shù)據(jù) 的存儲(chǔ)位置不同,從而導(dǎo)致釋放圖片資源的方式不同,具體如下圖


    1.png

注:若調(diào)用了Bitmap.recycle()后,再繪制Bitmap,則會(huì)出現(xiàn)Canvas: trying to use a recycled bitmap錯(cuò)誤

3.2 根據(jù)分辨率適配 & 縮放圖片

  • 優(yōu)化原因
    若 Bitmap 與 當(dāng)前設(shè)備的分辨率不匹配,則會(huì)拉伸Bitmap,而B(niǎo)itmap分辨率增加后,所占用的內(nèi)存也會(huì)相應(yīng)增加

因?yàn)锽itmap 的內(nèi)存占用 根據(jù) x、y的大小來(lái)增加的

  • 優(yōu)化方案


    1.png

3.3 按需 選擇合適的解碼方式

  • 優(yōu)化原因
    不同的圖片解碼方式 對(duì)應(yīng)的 內(nèi)存占用大小 相差很大,具體如下


    1.png
  • 優(yōu)化方案
    根據(jù)需求 選擇合適的解碼方式

使用參數(shù):BitmapFactory.inPreferredConfig 設(shè)置
默認(rèn)使用解碼方式:ARGB_8888

3.4 設(shè)置 圖片緩存

  • 優(yōu)化原因
    重復(fù)加載圖片資源耗費(fèi)太多資源(CPU、內(nèi)存 & 流量)

  • 優(yōu)化方案


    1.png

關(guān)于三級(jí)緩存機(jī)制,此處不作過(guò)多描述,具體請(qǐng)看文章:三級(jí)緩存說(shuō)明

至此,關(guān)于圖片資源Bitmap的使用優(yōu)化講解完畢

4. 總結(jié)

  • 本文全面總結(jié)了圖片資源Bitmap的使用優(yōu)化,具體如下圖


    1.png
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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