【问题标题】:How to Use bitmap recycle in android?如何在android中使用位图回收?
【发布时间】:2012-10-26 19:28:13
【问题描述】:

我遇到了位图回收问题。我在 pulltorefreshlistview 中显示位图。我有大约 30-50 张图片要下载,还有一些来自 web 服务功能的文本。我正在使用延迟加载图像并下载图像并将它们解码为 80x80 大小。我的问题是我收到了 OutOfmemoryError。所以我做了一些 R 和 D 并且知道位图没有立即被 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);
        }
    }

【问题讨论】:

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


    【解决方案1】:

    我们使用这个库:Android HttpImageManager

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2011-12-22
      • 2012-07-20
      • 2014-04-03
      • 1970-01-01
      • 2012-08-09
      • 2012-10-31
      相关资源
      最近更新 更多