日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

加载一张图片到ImageView到底占据多少内存

發(fā)布時(shí)間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加载一张图片到ImageView到底占据多少内存 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://blog.csdn.net/BUG_delete/article/details/79557939

簡(jiǎn)介

Android中經(jīng)常要通過ImageView進(jìn)行圖片資源顯示。在加載圖片時(shí),首先要考慮的兩個(gè)因素就是體驗(yàn)問題和性能問題。

其中,體驗(yàn)問題是指圖片顯示的是否正確(例如Universal-Image-Loader在適配Adapter圖片資源時(shí)會(huì)導(dǎo)致圖片顯示錯(cuò)位),分辨率是否合適等。而體驗(yàn)問題主要是指圖片加載速度,以及更加重要的圖片加載的內(nèi)存占用問題。本文重點(diǎn)介紹ImageView加載圖片中的內(nèi)存占用問題。

問題

在開發(fā)的過程中,經(jīng)常會(huì)發(fā)現(xiàn)因?yàn)榧虞d圖片而引起的Out of Memory(OOM)問題,有的時(shí)候會(huì)很奇怪,明明加載的圖片只有幾十K,為什么就會(huì)導(dǎo)致OOM呢?另外在圖片資源設(shè)置過程中,只放置某一個(gè)dpi文件夾(例如drawable-xxhdpi文件夾)的資源,在不同設(shè)備中對(duì)ImageView占用會(huì)有影響嗎?下面會(huì)對(duì)圖片加載的內(nèi)存占用相關(guān)問題進(jìn)行展開分析。

概念描述

首先,圖片對(duì)內(nèi)存的占用是一個(gè)疊加的過程,也就是說圖片資源不是及時(shí)釋放的,使用過的圖片在回收過程中可能會(huì)有一定程度的延遲。此外,很多時(shí)候圖片所依附的Activity是出于當(dāng)前Activity棧底的狀態(tài),再GC回收過程,這樣的bitmap資源會(huì)被認(rèn)為是活躍狀態(tài)的,不會(huì)被Android系統(tǒng)回收。

另外一方面,Android中圖片加載到內(nèi)存中的內(nèi)存占用跟圖片的實(shí)際大小沒有直接的關(guān)系,甚至于圖片的實(shí)際像素尺寸也沒有直接的關(guān)系。

在這里,首先要介紹幾個(gè)概念(以圖片A:尺寸60*60 大小2.02K為例):

  • 圖像尺寸:表示圖像在硬盤中的原始尺寸,本例中為60*60;
  • 圖像大小:表示圖像在占據(jù)硬盤容量大小,本例中為2.02K;
  • bitmap尺寸:表示圖像以bitmap的形式存在內(nèi)存中的實(shí)際尺寸;
  • 顯示尺寸:表示圖像在UI上顯示的實(shí)際尺寸;
  • 內(nèi)存占用:表示加載的圖片以bitmap的形式在內(nèi)存中的實(shí)際占用。

其中,bitmap尺寸和內(nèi)存占用可以通過下面的方法得到:

/**** 計(jì)算ImageView中加載圖片的具體尺寸和內(nèi)存占用大小* @param imageView*/private void calculateBitmapInfo(ImageView imageView) {Drawable drawable = imageView.getDrawable();if (drawable != null) {BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;Bitmap bitmap = bitmapDrawable.getBitmap();Log.d(TAG, " bitmap width = " + bitmap.getWidth() + " bitmap height = " + bitmap.getHeight());Log.d(TAG, " memory usage = " + bitmap.getAllocationByteCount());/**bitmap.getByteCount()方法不再使用*/} else {Log.d(TAG, "drawable is null!");}}

具體分析

為了明確這個(gè)問題,我們做了以下的幾組實(shí)驗(yàn)對(duì)比,具體如下:

實(shí)驗(yàn)1

測(cè)試方案:將尺寸為圖片A(尺寸60 * 60 大小2.02K),圖片B(尺寸60 * 60 大小1.63K),將圖片均放入drawable-xxhdpi文件夾,圖片顯示尺寸采用wrap_content,用華為mate 9(xxhdpi)手機(jī)進(jìn)行測(cè)試;

測(cè)試結(jié)果:二者內(nèi)存占用均為14400Byte,bitmap尺寸為60*60;

結(jié)果分析:說明內(nèi)存占用單獨(dú)與圖片原始大小沒有關(guān)系。

實(shí)驗(yàn)2

測(cè)試方案:將將尺寸為圖片A(尺寸60 * 60 大小2.02K)放入drawable-xxhdpi文件夾,圖片顯示尺寸設(shè)置為30dp * 30dp和60dp * 60dp,分別用mate 9手機(jī)進(jìn)行測(cè)試;

測(cè)試結(jié)果:內(nèi)存占用均為14400Byte,bitmap尺寸均為60*60;

結(jié)果分析:說明內(nèi)存占用與圖片的實(shí)際顯示尺寸沒有關(guān)系。

實(shí)驗(yàn)3

測(cè)試方案3:將將尺寸為圖片A(尺寸60*60 大小2.02K)放入drawable和drawable-xxhdpi文件夾,圖片顯示尺寸采用wrap_content,分別用mate 9手機(jī)進(jìn)行測(cè)試;

測(cè)試結(jié)果:內(nèi)存占用分別為129600Byte和14400Byte,圖片在ImageView中的bitmap尺寸為180 * 180和60 * 60;

結(jié)果分析:說明內(nèi)存占用與圖片的原始尺寸沒有關(guān)系,與bitmap尺寸有密切的關(guān)系。

總結(jié)

以上是生活随笔為你收集整理的加载一张图片到ImageView到底占据多少内存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。