Android开发Android开发Android技术知识

Android:一张图片占用多少内存

2018-07-01  本文已影响341人  猪_队友

我们在开发Android应用的时候,经常会遇到OOM,加载图片过大,更是在OOM里面占有很大的比重,

首先第一个问题:为什么会出现OOM?

答:为了整个系统的内存控制需要,Android系统为每一个应用程序都设置一个最大内存。超过这个内存数,那么就会OOM 内存溢出。当然不同手机这个最大内存的值不同。所以我们尽量不去占用过多内存。造成OOM的原因很多大家自行百度,这不是本文的重点。

第二个问题:为啥图片过大就会OOM?

因为图片的加载也是需要内存分配的,如果应用最大内存为32M,一个图片一下子需要50M的内存,那就肯定会溢出OOM。也有一种情况是 要一次加载很多图片,每一个可能不大,但是加起来的数量也是很恐怖。所以也有可能造成OOM。

第三个问题:图片的大小就是内存里的大小吗?

相信很多人,都有同样的而困惑,比如我有一张图片1080*720,图片的大小是200K(图片占用空间)

计算占用内存大小的公式:

图片宽 * 图片高 * 一个像素占用内存大小

一个像素占用内存像素大小和色值编码格式有关系,比如RGB就是3byte,ARGB就是4byte。我们这里就用ARGB来计算。

所以上面的图片占用内存就是:

1080*720*4byte = 3037.5K = 2.97M

我们可以看出图片的宽高,和编码格式会影响图片占用内存的大小。从这个公式里看不出还有别的因素~~这应该就是准确的内存大小了吧。

答案是不对的~

图片所在目录对内存也有影响,而且很多。

image.png

不懂屏幕适配知识的可以先看一下我之前写的这篇文章Android 屏幕适配

假设:我们在xhdpi 目录下放了这个图片

屏幕密度是2倍的手机上:

1080*720*4byte = 3037.5K = 2.97M

屏幕密度是3倍的手机上:

1080*1.5 *720*1.5 *4byte = 6827.6K =6.67M

所以在计算图片占用内存大小的时候,要考虑图片所在的目录,和设备密度。
其实本质上还是宽和高的像素数量。Android会把图片进行拉伸和收缩。已达到显示目的。

后记:

学会了如何计算图片占用内存大小,之后要考虑的是如何优化图片占用内存了。
平时可以多使用.9 png 来避免大图。
如果非要加载大图或者巨图,那么也只能按区域加载,每次加载到内存的都必须是不超过限制的,这个之后的文章会给出回答。

上一篇下一篇

猜你喜欢

热点阅读