如何在android中使用位图回收?

时间:2012-11-06 19:22:13

标签: android bitmap lazy-loading out-of-memory

我遇到了位图回收问题。我在pulltorefreshlistview中显示位图。我有大约30-50个图像下载以及来自webservice函数的一些文本。我正在使用延迟加载图像和下载图像并将其解码为80x80大小。我的问题是我得到OutOfmemoryError。所以我做了一些R和D,并且知道位图不是立即GC的。所以我想做回收()位图来回收内存。在位图上调用recycle()的位置。我正在使用着名的lazylist。在下面的代码设置位图后,我试着做bitmap.recycle()。我没有像stackoverflow上报告的其他任何错误,但奇怪的是listitems显示为空白。我想知道如果我循环()位图为什么textviews,在同一行受影响。由于有很多图像我的应用程序很快崩溃。我还想问一下如何一次回收Listview中设置的所有图像。请有人帮助我。

//Used to display bitmap in the UI thread
    class BitmapDisplayer implements Runnable
    {
        Bitmap bitmap;
        PhotoToLoad photoToLoad;
        public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
        public void run()
        {
            if(imageViewReused(photoToLoad))
                return;
            if(bitmap!=null)
                photoToLoad.imageView.setImageBitmap(bitmap);
            else
                photoToLoad.imageView.setImageResource(stub_id);
        }
    }

1 个答案:

答案 0 :(得分:0)

我们使用此库:Android HttpImageManager

使用列表很容易,我从来没有使用它的OutOfMemoryException。它将位图缓存在内存中以及文件系统中(您可以更改该行为)。

另外我建议您不要在手机上调整位图大小,但如果可以,请在服务器上远程调整位图(当然您可能没有这个选项)。