I am working on project which involves operations on bitmaps. Because I don't want to have OutofMemoryError I'm trying to recycle each of unused bitmap. Unfortunatelly I've recycled too much and have 'trying to use a recycled bitmap' error.
I am using:
Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
Bitmap.createScaledBitmap(bmp, w, h,true);
Should I recycle bmp after this methods or it is recycled by them? Like:
Bitmap newBitmap = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false);
bmp.recycle();
Can I just after imageView.setImageBitmap() recycle one which previously was used here? E.g.
myImageView.setImageBitmap(myBitmap);
myImageView.setImageBitmap(newBitmap);
myBitmap.recycle();
Thank you for help.
You only recycle bitmaps once you are done with them and are sure you never need to use the data in them again. It's not a magic method that you can use anywhere you like to give you more memory when dealing with bitmaps.
When I want to scale bitmap then I use the same reference:
When the first bitmap object loses its reference "bmp" it gets removed by GC (garbage collector) so you don't need to recyle anything. As for the image view it only references its source to "newBitmap" it does not create its own.
You should only recycle a bitmap when you do not need it anymore. However, you do need a bitmap when you want to display it. If you don't want to display it, then you can recycle a bitmap.