Recycling bitmaps

2019-05-04 00:22发布

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.

3条回答
你好瞎i
2楼-- · 2019-05-04 00:52

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.

查看更多
你好瞎i
3楼-- · 2019-05-04 00:59

When I want to scale bitmap then I use the same reference:

Bitmap bmp = Bitmap.createBitmap(bmp, x,y,w,h, matrix, false); 

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.

查看更多
迷人小祖宗
4楼-- · 2019-05-04 01:02

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.

查看更多
登录 后发表回答