如何在Android中使用位图回收(Bitmap recycle)?

3
我遇到了位图回收的问题。我在一个下拉刷新列表视图中显示位图。我需要从 WebService 函数下载大约 30-50 张图片以及一些文本。我正在使用图片的懒加载,将它们下载并解码为 80x80 的大小。我的问题是,我会遇到 OutOfMemoryError。因此,我进行了一些研究发现,位图不会立即被 GC。所以,我想要对位图进行 recycle() 操作来释放内存。在哪里调用位图的 recycle() 方法?我正在使用著名的 lazylist。在下面的代码设置完位图后,我尝试执行 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);
        }
    }
1个回答

0

我们使用这个库:Android HttpImageManager

它在列表中使用起来很简单,我从未遇到过OutOfMemoryException的问题。它会将位图缓存在内存和文件系统中(你可以更改这种行为)。

另外,我建议你如果有可能的话,不要在手机上调整位图的大小,而是在服务器上远程处理(当然,你可能没有这个选项)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接