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

基于V3.4.6和V3.5.1版本的對(duì)比

一、針對(duì)圖片資源的apk瘦身
1圈暗、把大圖轉(zhuǎn)換為webp格式泽铛,以及刪除無(wú)用的圖片資源減小圖片占用

2、vectorDrawable的使用:(5.0引入的牍蜂,以前的版本可以使用兼容包)
好處:1漾根、可以任意縮放而不會(huì)失真,僅僅需要一個(gè)文件鲫竞,就能動(dòng)態(tài)生成對(duì)應(yīng)分辨率的圖片辐怕。
2、文件一般較小从绘,省去很多資源寄疏。而且占用內(nèi)存非常小,性能高僵井。
缺點(diǎn):沒(méi)有圖片表達(dá)的色彩豐富陕截,只作為簡(jiǎn)單規(guī)則圖片的替換方式。


image.png

不過(guò)單個(gè)圖片的內(nèi)存占用前后變化不大批什,作為減少apk大小更有優(yōu)勢(shì)农曲。


image.png
image.png

3、開(kāi)啟shrinkResources編譯時(shí)刪除無(wú)用資源文件和圖片:


image.png

優(yōu)化后apk大小比較:apk包的大小由68.8MB縮減為51.3MB驻债,比原來(lái)減少了25%


image.png

二乳规、尺寸壓縮之后內(nèi)存占用對(duì)比
根據(jù)圖片的寬高生成對(duì)應(yīng)的縮放系數(shù),再根據(jù)該系數(shù)加載對(duì)應(yīng)的bitmap到內(nèi)存中:

fun getLocalBitmapFromResFolder(context: Context?, resId: Int, reqWidth: Int, reqHeight: Int): Bitmap? {
    val opts = BitmapFactory.Options()
    opts.inJustDecodeBounds = true
    var bitmap: Bitmap?
    try {
//        BitmapFactory.decodeResource(context?.resources, resId, opts)
        Log.d("ImageViewUtils:", BitmapFactory.decodeResource(context?.resources, resId).allocationByteCount.toString())
    } catch (e: OutOfMemoryError) {
        e.printStackTrace()
        System.gc()
        return null
    } catch (e: Exception) {
        e.printStackTrace()
        return null
    }

    opts.inPreferredConfig = Bitmap.Config.RGB_565
    opts.inTempStorage = ByteArray(10 * 1024 * 1024)
    try {
        BitmapFactory.decodeResource(context?.resources, resId, opts)
        Log.d("ImageViewUtils:原始圖的寬高",opts.outWidth.toString()+","+opts.outHeight)
    } catch (e: OutOfMemoryError) {
        e.printStackTrace()
        System.gc()
        return null
    } catch (e: Exception) {
        e.printStackTrace()
        return null
    }

        try {
            opts.inSampleSize = calculateInSampleSize(opts, reqWidth, reqHeight)
            Log.i("ImageViewUtils:", "inSampleSize " + opts.inSampleSize)
            opts.inJustDecodeBounds = false
            bitmap = BitmapFactory.decodeResource(context?.resources, resId, opts)
            Log.i("ImageViewUtils:壓縮后的寬高", "w:" + bitmap.width + " h:" + bitmap.height)
            Log.d("ImageViewUtils:",bitmap.byteCount.toString())
        } catch (outOfMemoryError: OutOfMemoryError) {
            outOfMemoryError.printStackTrace()
            System.gc()
            return null
        }

    return bitmap
}

//計(jì)算縮放系數(shù)合呐,是2的倍數(shù)
fun calculateInSampleSize(options: BitmapFactory.Options, reqWidth: Int, reqHeight: Int): Int {
    val height = options.outHeight
    val width = options.outWidth
    var inSampleSize = 1

    if (height > reqHeight || width > reqWidth) {

        val halfHeight = height / 2
        val halfWidth = width / 2

        while (halfHeight / inSampleSize > reqHeight && halfWidth / inSampleSize > reqWidth) {
            inSampleSize *= 2
        }
    }
    return inSampleSize
}

使用RGB_565格式替代默認(rèn)的ARGB_8888,能減少一半的開(kāi)銷(xiāo)暮的,一個(gè)像素占用2個(gè)字節(jié),而ARGB_8888一個(gè)像素占用4個(gè)字節(jié)淌实,如果圖片對(duì)alpha要求不高冻辩,是一個(gè)不錯(cuò)的選擇。

相同圖片占用堆內(nèi)存比較:占用內(nèi)存字節(jié)數(shù)縮減為原來(lái)的1/4
優(yōu)化前:


圖片

優(yōu)化后:


image.png

·

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拆祈,一起剝皮案震驚了整個(gè)濱河市恨闪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌放坏,老刑警劉巖凛剥,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異轻姿,居然都是意外死亡犁珠,警方通過(guò)查閱死者的電腦和手機(jī)逻炊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)犁享,“玉大人余素,你說(shuō)我怎么就攤上這事〈独ィ” “怎么了桨吊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凤巨。 經(jīng)常有香客問(wèn)我视乐,道長(zhǎng),這世上最難降的妖魔是什么敢茁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任佑淀,我火速辦了婚禮,結(jié)果婚禮上彰檬,老公的妹妹穿的比我還像新娘伸刃。我一直安慰自己,他們只是感情好逢倍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布捧颅。 她就那樣靜靜地躺著,像睡著了一般较雕。 火紅的嫁衣襯著肌膚如雪碉哑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天亮蒋,我揣著相機(jī)與錄音扣典,去河邊找鬼。 笑死宛蚓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的设塔。 我是一名探鬼主播凄吏,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闰蛔!你這毒婦竟也來(lái)了痕钢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤序六,失蹤者是張志新(化名)和其女友劉穎任连,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體例诀,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡随抠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年裁着,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拱她。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡二驰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秉沼,到底是詐尸還是另有隱情桶雀,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布唬复,位于F島的核電站矗积,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敞咧。R本人自食惡果不足惜棘捣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妄均。 院中可真熱鬧柱锹,春花似錦、人聲如沸丰包。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邑彪。三九已至瞧毙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寄症,已是汗流浹背宙彪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留有巧,地道東北人释漆。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像篮迎,于是被迫代替她去往敵國(guó)和親男图。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容