1

私のアプリケーションでは、いくつかのビットマップ画像をHashMapに保存しています。クラスImageHolderのメンバーとしてハッシュマップを使用します。画像をさらに処理するには、プログラムのHashMapに画像が必要です。アプリケーションを実行すると、ビットマップイメージが自動的にリサイクルされ、次のようになります。

java.lang.IllegalStateException:リサイクルされたビットマップでgetPixels()を呼び出すことができません。

ビットマップ画像が自動的にリサイクルされないように助けてください。

ImageHolderクラスのコードは次のとおりです。

public class ImageHolder {

    private HashMap<String, Bitmap> mImageMap = null;

    public ImageHolder() {  
        mImageMap = new HashMap<String, Bitmap>();
    }
    /**
     * @return the mImageMap
     */
    public Map<String, Bitmap> getmImageMap() {
        return mImageMap;
    }
    /**
     * @param mImageMap the mImageMap to set
     */
    public void setmImageMap(HashMap<String, Bitmap> mImageMap) {
        this.mImageMap = mImageMap;
    }

}
4

2 に答える 2

0

ビットマップをロードするときにピクセルを読み取り、これらの情報をどこかに保存します。なぜこれらのピクセルが必要なのかはわかりませんが、ピクセル情報を長期間にわたって保存しないことをお勧めします。これは実際にメモリを消費するためです。

于 2011-09-26T14:24:25.547 に答える
0

ソースコード全体がないとわかりにくいです。ImageView や Holder クラスなど、複数の場所で同じビットマップを使用している可能性があります。どちらかがリサイクルを引き起こす場合、両方が同じオブジェクトを参照しているため、もう一方に影響します。これを行う場合は、bitmap.copy メソッドを使用することをお勧めします。

于 2011-09-26T14:31:03.880 に答える