Saya punya masalah yang sangat kritis. Hanya Android 4.1, Bitmap didaur ulang secara otomatis! Saya tidak memanggil recycle() dalam kode saya! Proyek saya berfungsi dengan baik di versi OS lain (~ 4.0.3) dengan resolusi apa pun. Proyek lain juga memiliki masalah yang sama.
Semua file gambar ada di folder drawable-nodpi. Saya selalu mengubah ukurannya agar sesuai dengan resolusi perangkat apa pun.
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;
}
Dalam pengujian saya,
- Contoh bitmap yang sama, tetapi masalah terjadi tergantung pada pengubahan ukuran nilai.
misal) int lebar = 100;
Bitmap imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, lebar, lebar, benar); -> mengembalikan contoh daur ulang.
lebar = 200;
imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, lebar, lebar, benar); -> mengembalikan contoh normal.
Dalam resolusi yang berbeda, imgStar berfungsi dengan baik, tetapi masalah terjadi pada contoh bitmap lainnya. Demikian pula, Saat saya mengubah nilai pengubahan ukuran, itu berfungsi dengan baik.
Dalam resolusi yang sama, masalah terjadi pada contoh bitmap lain, jika saya mengubah nama folder file gambar. drawable-nodpi -> drawable -> drawable-ldpi, ..., drawable-xdpi.
Nilai pengubahan ukuran yang sama, berfungsi dengan baik jika saya memasukkan id sumber daya lain. mantan)
int lebar = 100;
Bitmap imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.star, width, width , true); -> mengembalikan contoh daur ulang.
imgStar = MyResourceManager.getInstance().GetScaledBitmap(R.drawable.diamond, lebar, lebar, benar); -> mengembalikan contoh normal.
Tolong... apa yang bisa saya lakukan?! T ^ T