У меня очень критическая проблема. Только Android 4.1, Bitmap перерабатывается автоматически! Я не вызывал recycle() в своем коде! Мой проект отлично работает в других версиях ОС (~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;
}
В моем тестировании,
- Тот же экземпляр растрового изображения, но проблема возникает в зависимости от значения изменения размера.
например) ширина интервала = 100;
Растровое изображение imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, ширина, ширина, правда); -> возвращает переработанный экземпляр.
ширина = 200;
imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, ширина, ширина, правда); -> возвращает обычный экземпляр.
В разных разрешениях imgStar работает нормально, но проблема возникает в другом экземпляре растрового изображения. Точно так же, когда я меняю значение изменения размера, все работает нормально.
В том же разрешении проблема возникает в другом экземпляре растрового изображения, если я изменяю имя папки с файлами изображений. drawable-nodpi -> drawable -> drawable-ldpi,..., drawable-xdpi.
То же значение изменения размера, оно отлично работает, если я поставлю другой идентификатор ресурса. бывший)
целая ширина = 100;
Растровое изображение imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.звездочка, ширина, ширина, правда); -> возвращает переработанный экземпляр.
imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.алмаз, ширина, ширина, правда); -> возвращает обычный экземпляр.
Пожалуйста... что я могу сделать?! Т ^ Т