与其磁盘大小相比,android drawable image需要大量内存

时间:2016-05-10 06:31:51

标签: android

对于mdpi,hdpi,xhdpi ....我有以下不同尺寸的drawable:

-rw-r--r--@ 1 xxx  yyy    31K Apr 16 14:19 myImage.9.png
-rw-r--r--@ 1 xxx  yyy    63K Apr 16 14:19 myImage.9.png
-rw-r--r--@ 1 xxx  yyy    95K Apr 16 14:19 myImage.9.png
-rw-r--r--@ 1 xxx  yyy   196K Apr 16 14:19 myImage.9.png
-rw-r--r--@ 1 xxx  yyy   307K Apr 16 14:19 myImage.9.png

我用它如下

    <ImageView
        android:paddingLeft="10dp"
        android:paddingRight="0dp"
        android:layout_centerVertical="true"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:scaleType="fitCenter"
        android:src="@drawable/myImage" />

此时我的应用需要20MB

如果我做出更改android:src="@null"

此时我的应用需要10MB

为什么drawable需要这么多内存,实际大小要少得多?

1 个答案:

答案 0 :(得分:2)

这取决于您的屏幕分辨率,请考虑屏幕上有多少点。每个点都有颜色信息或深度(取决于Android版本&gt; = 2.3默认情况下加载32位的位图)。

即使图像分辨率较低,操作系统也会对其进行缩放(添加点),以便在大屏幕上观看。

所以你得到X * Y *颜色深度。

像往常一样,我们有权衡:磁盘大小(真实分辨率和颜色深度),CPU时间(缩放)。

例如,您的手机屏幕分辨率为200 * 100 = 20_000点。 如果你想在整个屏幕上绘制一些东西,你必须点亮所有20_000个点,每个点都有颜色信息(简单的情况RGB)。结果20_000点*深度(在我们的例子中是32位)= 640_000位。

检查graphics architecture internals