Android文件夹占用空间分析,关于Android中图片大小、内存占用和drawable文件夹研究分析...

本文探讨了Android中图片在不同drawable文件夹下的内存占用情况,分析了Bitmap内存计算原理,指出图片硬盘大小与内存占用的差异源于压缩方式。建议使用适当分辨率的切图并正确放置在drawable目录,以避免内存浪费和性能影响。

引用链接

结果分析

同一张图片,放在不同目录下,会生成不同大小的Bitmap

Bitmap的长度和宽度越大,占用的内存就越大

图片在硬盘上占用的大小,与在内存中占用的大小完全不一样

下面我会对上面几个问题一一解释。

我们以放在drawable文件夹下面的图片为例,加载到内存之后,2160*3840大小的Bitmap占用的内存为

2160 * 3840 * 4 = 3317,7600 byte = 3,2400kb = 31.640625 M

所以drawable文件夹下的App内存占用 = 原始内存8.31M+图片内存31.64M= 39.95M ,与实际内存占用39.88M存在0.1755%的误差,在误差范围之内。

先简单解释一下上面的计算公式,长*宽是图片的像素总数,乘以4则是因为一个像素占用A、R、G、B四个通道,每个通道占用8位,所以描述一个像素需要32位即4个字节。

一个颜色通道需要8位描述,2^8=256,所以每个颜色通道就有256种状态。如果把彩色图转化成灰阶图的话,也有256种状态分割从白色到黑色之间的过渡颜色。

当然,也并不是所有格式的图片每个像素占用4字节,这和图片在加载时设置的Bitmap.Config有关,默认的是Bitmap.Config.ARGB_8888,其他类型如下:

Bitmap.Config.ALPHA_8

此时图片只有alpha值,没有RGB值

A 占 8bit = 1字节 = 1像素

Bitmap.Config.ARGB_4444

一个像素占用2个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占4个bites共16bites,即2个字节

ARGB各占8bit(4 * 4)= 16bit = 2字节 = 1像素

Bitmap.Config.ARGB_8888

一个像素占用4个字节,alpha(A)值,Red(R)值,Green(G

Android Studio中,不同的`drawable`文件夹主要用于适配不同屏幕密度的设备。常见的`drawable`文件夹有`drawable-hdpi`、`drawable-mdpi`、`drawable-xhdpi`、`drawable-xxhdpi`等。当应用运行在不同屏幕密度的设备上时,系统会自动从相应的`drawable`文件夹中选择合适的图片资源,以保证图片在不同设备上都能以合适的大小清晰度显示。 - **`drawable-mdpi`**:适用于中等密度屏幕(约160dpi)的设备。在这个文件夹中放置的图片会在中等密度屏幕上以原始大小显示。如果在其他密度的屏幕上使用这些图片,系统会自动进行缩放,可能会导致图片模糊或失真。 - **`drawable-hdpi`**:适用于高密度屏幕(约240dpi)的设备。这里的图片比`drawable-mdpi`中的图片要大,在高密度屏幕上可以显示得更加清晰。当应用运行在高密度屏幕设备上时,系统会优先从这个文件夹中加载图片。 - **`drawable-xhdpi`**:适用于超高密度屏幕(约320dpi)的设备。该文件夹中的图片更大,以适应更高的屏幕分辨率。在超高密度屏幕上使用这些图片可以避免因缩放而导致的画质损失。 - **`drawable-xxhdpi`**:适用于超超高密度屏幕(约480dpi)的设备。这里的图片尺寸更大,能在超超高密度屏幕上提供最佳的显示效果。 例如,如果一个应用在`drawable-mdpi`、`drawable-hdpi`、`drawable-xhdpi``drawable-xxhdpi`文件夹中都放置了同一张图片的不同尺寸版本,当应用运行在一个超高密度屏幕(约320dpi)的设备上时,系统会优先从`drawable-xhdpi`文件夹中加载图片,以保证图片的清晰度质量。 在Nexus 6这类设备上,其屏幕像素密度(PPI)为493,介于`xxhdpi``xxxhdpi`之间,显示时需要对`xxxhdpi`的资源进行缩小。若使用了`mipmap-xxxhdpi`,会对缩放有优化,性能更好且占用内存更少,所以官方推荐使用`mipmap`来存放图片 [^5]。 ```xml <!-- 在布局文件中引用图片资源 --> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/my_image" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值