对于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需要这么多内存,实际大小要少得多?
答案 0 :(得分:2)
这取决于您的屏幕分辨率,请考虑屏幕上有多少点。每个点都有颜色信息或深度(取决于Android版本&gt; = 2.3默认情况下加载32位的位图)。
即使图像分辨率较低,操作系统也会对其进行缩放(添加点),以便在大屏幕上观看。
所以你得到X * Y *颜色深度。
像往常一样,我们有权衡:磁盘大小(真实分辨率和颜色深度),CPU时间(缩放)。
例如,您的手机屏幕分辨率为200 * 100 = 20_000点。 如果你想在整个屏幕上绘制一些东西,你必须点亮所有20_000个点,每个点都有颜色信息(简单的情况RGB)。结果20_000点*深度(在我们的例子中是32位)= 640_000位。