通用图像加载器是否支持蜂窝之前的Android版本?

时间:2012-10-08 09:58:33

标签: java android universal-image-loader

我想知道通用图像加载器(Found Here)支持蜂窝之前的版本。由于蜂窝之前的版本具有单独的本机堆栈,因此位图使用的内存不会计入VM堆。

我正在开发一个使用此lib的图像密集型应用程序,我在android ICS上成功使用它。现在我正在尝试降低API要求,并且我在远离内存不足异常时遇到了一些麻烦,这些异常导致我的应用程序崩溃。

2 个答案:

答案 0 :(得分:2)

Universal Image Loader支持1.5+ Android版本。 UIL尝试通过使用弱引用和自己的逻辑来阻止OOM进行缓存和引用清理。为了在3.0之前的Android版本中进行有效的内存管理,我们需要使用Bitmap.recycle()来清除本机内存。但是UIL不能自己做,因为它无法知道Bitmap何时不可见而且没有被任何人引用。

用户应该自己回收,当他知道自己可以做到时。

还有一些UIL配置调整可以防止OOM。

P.S。:如何定义Bitmap是否在UIL内存缓存中:

Bitmap bmp = ...;
boolean isBitmapInCache = false;
MemoryCacheAware<String, Bitmap> memoryCache = ImageLoader.getInstance().getMemoryCache();
for (String key : memoryCache.keys()) {
    if (bmp == memoryCache.get(key)) {
        isBitmapInCache = true;
        break;
    }
}

if (!isBitmapInCache) {
    // You can recycle bitmap
}

答案 1 :(得分:0)

它应该工作,它将位图大小计算为:

 bitmap.getRowBytes() * bitmap.getHeight();

无论是在java还是本机堆上,都能提供正确的位图大小。