gpt4 book ai didi

android - ImageView 内存泄漏 - 简单图像

转载 作者:行者123 更新时间:2023-11-29 01:42:40 25 4
gpt4 key购买 nike

我创建了一个类,其任务是将适当的图像与相应的 ImageVew 相匹配。

不幸的是,这会导致内存泄漏......

正如 stackoverflow 上有人在类似问题中所建议的那样,我将图像从资源转换为位图。

我的类(class)是这样的:

public ImageAdjuster(Context context, ImageView iv1,
ImageView iv2, ImageView iv3, ImageView iv4, ImageView iv5,
ImageView iv6, ImageView iv7) {

this.iv1 = iv1;
this.iv2 = iv2;
this.iv3 = iv3;
this.iv4 = iv4;
this.iv5 = iv5;
this.iv6 = iv6;
this.iv7 = iv7;
this.context = context;

loadAllDrawables();
}

private void loadAllDrawables() {
imageResourceMap = new HashMap<String, Integer>();

imageResourceMap.put("image1", R.drawable.image1);
imageResourceMap.put("image2", R.drawable.image2);
imageResourceMap.put("image3", R.drawable.image3);
imageResourceMap.put("image4", R.drawable.image4);
imageResourceMap.put("image5",
R.drawable.image5);
imageResourceMap.put("image6",
R.drawable.image6);
imageResourceMap.put("image7",
R.drawable.image7);


loadBitmaps();
}

private void loadBitmaps() {
imageBitmap = new HashMap<String, Bitmap>();
for (String s : imageResourceMap.keySet()) {
Bitmap tmp = getBitmapFromRes(imageResourceMap.get(s));

imageBitmap.put(s, tmp);
}

imageResourceMap = null;
}

private Bitmap getBitmapFromRes(int resId) {
Bitmap tmp = null;
Bitmap b = null;
try {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;

InputStream fis = context.getResources().openRawResource(resId);
tmp = BitmapFactory.decodeStream(fis, null, o);
fis.close();

BitmapFactory.Options o2 = new BitmapFactory.Options();
fis = context.getResources().openRawResource(resId);
b = BitmapFactory.decodeStream(fis, null, o2);
fis.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (tmp != null) {
tmp.recycle();
tmp = null;
}
}
return b;
}

public void setCorrectImages(Miner miner) {

iv1.setImageBitmap(imageBitmap.get("image1"));
iv2.setImageBitmap(imageBitmap.get("image2"));
iv3.setImageBitmap(imageBitmap.get("image3"));
iv4.setImageBitmap(imageBitmap.get("image4"));
iv5.setImageBitmap(imageBitmap.get("image5"));
iv6.setImageBitmap(imageBitmap.get("image6"));
iv7.setImageBitmap(imageBitmap.get("image7"));

iv1.setAdjustViewBounds(true);
iv2.setAdjustViewBounds(true);
iv3.setAdjustViewBounds(true);
iv4.setAdjustViewBounds(true);
iv5.setAdjustViewBounds(true);
iv6.setAdjustViewBounds(true);
iv7.setAdjustViewBounds(true);

}

public void recycleImageBitmaps() {
for (Bitmap b : imageBitmap.values()) {
if (b != null) {
b.recycle();
}
}

}

在我的 Activity 中,我回收图像 onDestroy 并初始化它 onCreate

我正在使用 MAT 来定位泄漏。查看打印屏幕:

图表 Diagram嫌疑人 Suspects详情 Details Details

每次打开这个分支都会导致相同的 View ;/

我已经阅读了很多如何解决我的问题的指南,但没有一个对我有帮助

谢谢大家的帮助,当然我很抱歉我的英语...

最佳答案

为什么要将资源转换为位图? android有一个非常有效的加载资源的方式,我认为只需将图像资源设置为 ImageView 就可以非常有效。

关于android - ImageView 内存泄漏 - 简单图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23516303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com