我是一个相当新的程序员,所以任何建议将不胜感激。我有一个类,每次调用它时都会在循环中运行 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();
}
}
}
视图保持器 vh- 包含 2 个文本视图和一个图像视图的类
ViewGroup容器- 用于膨胀我所做的 xml 设计的容器(带有 2 个文本视图和一个 ImageView)
LinearLayout 林莱- 我将容器添加到的滚动视图布局(根据我想要在该视图中添加的元素数量来扩展它)
我创建的位图使用了太多内存,所以我想回收它们,但是每次我在将容器添加到布局后尝试回收它们时,它都会说我正在尝试使用回收的位图(当我'我在将容器添加到屏幕后清楚地调用了回收)...我在这一点上被难住了。你能帮忙的话,我会很高兴。
目前,您正在回收位图,然后再将其渲染到 UI 上,因为setImageBitmap(bm)
只会准备 ImageView 来渲染提供的位图。渲染将安排在 UI 的下一次失效时。
bm.recycle()
在渲染位图之前被调用,因此应用程序在尝试绘制位图时会崩溃。
在 UI 中使用位图时不能回收它,位图必须保留在内存中。在大多数情况下,Android 会很好地处理回收,但如果您需要自己回收,则需要确保之后不要使用 Bitmap 实例(就像在这种情况下,Bitmap 实例稍后将被渲染)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)