3

我遇到了位图回收问题。我在 pulltorefreshlistview 中显示位图。我有大约 30-50 张图片要下载,还有一些来自 web 服务功能的文本。我正在使用延迟加载图像并下载图像并将它们解码为 80x80 大小。我的问题是我得到了 OutOfmemoryError。所以我做了一些 R 和 D 并且知道位图没有立即被 GC。所以我想做 recycle() 位图来回收内存。在位图上调用 recycle() 的位置。我正在使用著名的惰性列表. 在设置位图后,在下面的代码中,我尝试执行 bitmap.recycle()。我没有像 stackoverflow 上报告的其他错误那样出现任何错误,但奇怪的是列表项显示为空白。我想知道如果我 recycle() 位图为什么会影响同一行中的文本视图。由于有大量图像,我的应用程序很快就会崩溃。我还想问一下如何一次回收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);
        }
    }
4

1 回答 1

0

我们使用这个库:Android HttpImageManager

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

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

于 2012-11-06T19:28:49.220 回答