gpt4 book ai didi

android - Canvas : Trying to use a recycled bitmap error

转载 作者:行者123 更新时间:2023-11-29 16:58:29 27 4
gpt4 key购买 nike

我是一个相当新的程序员,所以任何建议将不胜感激。我有一个每次调用时都在循环中运行 AsyncTask 的类。 AsyncTask 看起来像这样:

public class LoadImageTask extends AsyncTask<Void, Void, Void> {

Context c;
ViewHolder vh;
public Bitmap bm;
ViewGroup container;
LinearLayout layout;

public LoadImageTask(Context c, ViewHolder vh, ViewGroup container,
LinearLayout linlay) {

this.vh = vh;
this.c = c;
this.container = container;
this.layout = linlay;
}

protected Void doInBackground(Void... params) {
Tools tools = new Tools();
this.bm = tools.getAlbumart(this.c, vh.albumID);
return null;
}

protected void onPostExecute(Void param) {
vh.iv.setImageBitmap(this.bm);
this.layout.addView(this.container);
if (bm!=null) {
bm.recycle();
}

}
}

ViewHolder vh - 包含 2 个 TextView 和一个 ImageView 的类

ViewGroup 容器 - 用于扩展我所做的 xml 设计的容器(带有 2 个 TextView 和一个 ImageView)

LinearLayout linlay - 我要将容器添加到的 ScrollView 布局(根据我在该 View 中想要的元素数量扩展它)

我创建的位图使用了太多内存,所以我想回收它们,但是每次我在将容器添加到布局后尝试回收它们时,它都说我正在尝试使用回收位图(当我在将容器添加到屏幕后明确调用回收时)......我在这一点上感到难过。任何帮助都会很好。

最佳答案

目前您正在回收位图,然后再将其渲染到 UI 上,因为 setImageBitmap(bm) 只会准备 ImageView 以渲染提供的位图。渲染将安排在下一次 UI 失效时进行。

bm.recycle() 在 Bitmap 被渲染之前被调用,因此应用程序在尝试绘制 Bitmap 时会崩溃。

在 UI 中使用位图时不能回收位图,位图必须保存在内存中。在大多数情况下,Android 会很好地处理回收,但如果您需要自己回收,则需要确保之后不使用 Bitmap 实例(因为在这种情况下,稍后将呈现 Bitmap 实例)。

关于android - Canvas : Trying to use a recycled bitmap error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756142/

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