【发布时间】:2016-01-16 11:06:17
【问题描述】:
在我的 Android 应用程序中,我有一个自定义 ImageView,它需要根据用户交互来更新其图像。 ImageView 只能有两张图片,分别代表一张卡片的背面和正面。 因此,当用户单击按钮时,我需要显示卡片的背面(将自定义的 ImageView 图像设置到卡片的背面,当用户再次单击按钮时,将正面图像设置为 ImageView 可绘制)。
为了实现这一点,我在自定义 ImageView 中有两种方法:
public void showBack() {
setImageResource(R.drawable.card_back);
}
public void showFront() {
setImageResource(R.drawable.card_front);
}
当然,这很好用,但我的应用程序的内存消耗有时会接近 114 MB,并且随着用户单击按钮(旋转卡片)而增加。
因此,我认为问题可能是由于图像的变化而产生的。 图片很小,一个是 104.6KB,另一个是 80.4KB(PNG 格式),所以我不明白为什么我的应用程序会消耗这么多内存(可能是因为图像被分配了很多次并且从不回收?或者可能是因为Android的drawables缓存系统?)
那么,我该怎么做才能解决我的问题呢?
谢谢。
图片尺寸为 335 x 501
【问题讨论】:
-
当我将大图像显示为按钮背景时,我遇到了同样的问题。我为减少内存使用量所做的是缩小我使用的图像并在 xml 中重新创建具有形状的简单图像。网上有人建议在使用任何位图之前先做 System.gc,但我的伙伴认为我们应该让 Java 处理 GC,因为这就是它的全部意义......
-
可能的原因:如果您将图像存储在可绘制文件夹中,Android 会将它们视为 mdpi 并放大它们。将它们放在 xhdpi 文件夹中。
-
我注意到同样的现象,相对较小的 jpeg 可绘制对象加载到 ViewPager 中。我在 Drawable 文件夹中找到了 jpeg,它们正在创建 90MB 的内存分配。我将文件移动到 xxxhdpi 文件夹中,分配大约 6MB。它看起来仍然很多,但正如@black 所提到的,它产生了巨大的变化。
标签: android image android-imageview android-image