0

私は、universal-image-loader (ここに見つかりました) がハニカムより前のバージョンをサポートしているのか疑問に思っていました。ハニカムより前のバージョンには個別のネイティブ ヒープ スタックがあるため、ビットマップによって使用されるメモリは VM ヒープにカウントされません。

このライブラリを使用している画像集約型アプリを開発していますが、Android ICS で正常に使用できました。現在、API 要件を下げようとしていますが、アプリがクラッシュする原因となるメモリ不足の例外を回避するのに問題があります。

4

2 に答える 2

2

Universal Image Loader supports 1.5+ Android versions. UIL tries to prevent OOM by using of weak references and own logic for caching and reference cleaning. For effective memory management in Android versions prior to 3.0 we need use Bitmap.recycle() to clear native memory. But UIL can't do it itself because it can't know when Bitmap is not visible and not referenced by anyone.

User should do recycling yourself, when he know that he can do it.

Also there are some UIL configuration tuning is possible for preventing OOM.

P.S.: How to define if Bitmap is in UIL memory-cache:

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
}
于 2012-10-08T10:14:40.863 に答える
0

ビットマップサイズを次のように計算します。

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

Javaまたはネイティブヒープに関係なく、正しいビットマップサイズを提供します。

于 2012-10-08T10:12:05.857 に答える