当在xml布局中声明2个ImageView时,内存中有2个可绘制的副本?

问题描述 投票:0回答:1

当我有这样的xml布局时:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_image" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_image" />

然后在内存中有2个与可绘制对象相关联的位图实例,或者只有一个?

android android-imageview android-drawable android-bitmap android-memory
1个回答
0
投票
好问题!!

我已经查看了源代码,看起来它将为每个ImageView创建新的位图实例。所有这一切都要经历一个麻烦的过程...

ImageView使用Drawable

Drawable使用ImageDecoder

ImageDecoder使用BitmapFactory

BitmapFactory使用native C++ code进行图像解码。 (请看第157行及以下)

简短地看代码会告诉我,即使使用相同的图像,它也会为每个ImageView创建新的位图实例。我没有找到与这种优化相关的任何逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.