私は非常に重大な問題を抱えています。Android 4.1 のみ、ビットマップは自動的にリサイクルされます! コードで recycle() を呼び出しませんでした! 私のプロジェクトは、他の OS バージョン (~ 4.0.3) でどの解像度でも問題なく動作します。他のプロジェクトにも同じ問題があります。
すべての画像ファイルは drawable-nodpi フォルダーにあります。常に、どのデバイスの解像度にも合うようにサイズを変更しました。
public Bitmap GetBitmap(int resource){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDither = true;
options.inPurgeable = true;
Bitmap tmp = null;
try{
tmp = BitmapFactory.decodeResource(mResources, resource, options);
}catch(OutOfMemoryError e){
options.inSampleSize = 2;
tmp = BitmapFactory.decodeResource(mResources, resource, options);
}
return tmp;
}
public Bitmap GetScaledBitmap(int resource, int width, int height, boolean filter){
Bitmap tmp = GetBitmap(resource);
Bitmap img = Bitmap.createScaledBitmap(tmp, width, height, filter);
tmp.recycle();
tmp = null;
return img;
}
私のテストでは、
- 同じビットマップ インスタンスですが、サイズ変更値によって問題が発生します。
例) int 幅 = 100 ;
ビットマップ imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, width, width , true); -> リサイクルされたインスタンスを返します。
幅= 200 ;
imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, width, width, true); -> 通常のインスタンスを返します。
異なる解像度では、imgStar は正常に動作しますが、問題は他のビットマップ インスタンスで発生します。同様に、サイズ変更値を変更すると、正常に機能します。
同じ解像度で、画像ファイル フォルダーの名前を変更すると、他のビットマップ インスタンスで問題が発生します。drawable-nodpi -> drawable -> drawable-ldpi, ..., drawable-xdpi.
サイズ変更の値は同じですが、他のリソース ID を指定しても問題なく動作します。元)
int 幅 = 100;
Bitmap imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star , width, width , true); -> リサイクルされたインスタンスを返します。
imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable. diamond , width, width, true); -> 通常のインスタンスを返します。
お願い…どうすればいいの!? T^T