首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尽管使用了弱引用,异步任务中仍存在内存泄漏

尽管使用了弱引用,异步任务中仍存在内存泄漏
EN

Stack Overflow用户
提问于 2013-07-05 05:37:24
回答 1查看 362关注 0票数 0

我的应用程序中有一个内存泄漏,我派生到AsyncTask-class和onPostExecute-method中。onPostExcecute方法接收9个按比例缩小的位图,并将这些位图放入滚动视图中。滚动视图又被放入一个警告对话框中。

有什么建议可以阻止这种内存泄漏吗?我已经尝试对所有9个位图进行弱引用,但都没有成功。

cahcing是另一种选择吗?

代码语言:javascript
复制
protected void onPostExecute(Bitmap[] bitmap) {

if (view == null) { 
    view = factory.inflate(R.layout.alertviews4, null);
    alertadd = new AlertDialog.Builder(context);
}



WeakReference <Bitmap> weakBitmap0 = new WeakReference <Bitmap> (bitmap[0]);
WeakReference <Bitmap> weakBitmap1 = new WeakReference <Bitmap> (bitmap[1]);
WeakReference <Bitmap> weakBitmap2 = new WeakReference <Bitmap> (bitmap[2]);
WeakReference <Bitmap> weakBitmap3 = new WeakReference <Bitmap> (bitmap[3]);
WeakReference <Bitmap> weakBitmap4 = new WeakReference <Bitmap> (bitmap[4]);
WeakReference <Bitmap> weakBitmap5 = new WeakReference <Bitmap> (bitmap[5]);
WeakReference <Bitmap> weakBitmap6 = new WeakReference <Bitmap> (bitmap[6]);
WeakReference <Bitmap> weakBitmap7 = new WeakReference <Bitmap> (bitmap[7]);
WeakReference <Bitmap> weakBitmap8 = new WeakReference <Bitmap> (bitmap[8]);

mImage = (ImageView) view.findViewById(R.id.img1);
mImage.setImageBitmap(weakBitmap0.get());
mImage = (ImageView) view.findViewById(R.id.img2);
mImage.setImageBitmap(weakBitmap1.get());
mImage = (ImageView) view.findViewById(R.id.img3);
mImage.setImageBitmap(weakBitmap2.get());
mImage = (ImageView) view.findViewById(R.id.img4);
mImage.setImageBitmap(weakBitmap3.get());
mImage = (ImageView) view.findViewById(R.id.img5);
mImage.setImageBitmap(weakBitmap4.get());
mImage = (ImageView) view.findViewById(R.id.img6);
mImage.setImageBitmap(weakBitmap5.get());
mImage = (ImageView) view.findViewById(R.id.img7);
mImage.setImageBitmap(weakBitmap6.get());
mImage = (ImageView) view.findViewById(R.id.img8);
mImage.setImageBitmap(weakBitmap7.get());
mImage = (ImageView) view.findViewById(R.id.img9);
mImage.setImageBitmap(weakBitmap8.get());

alertadd.setView(view);

alertadd.setNeutralButton("Here!", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dlg, int sumthin) {

    }
});
alertadd.show();

}

EN

Stack Overflow用户

发布于 2013-07-05 06:02:22

对于API级别低于11的应用程序接口,位图是一个困难的主题。它们被计算到应用程序的堆限制,而不是简单地由GC收集。最佳实践是调用bitmap.recycle()并将指针设为空,以允许GC收集引用。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17478380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档