我有一些CustomButton
,在某些时候,背景从base64String绘制成BitmapDrawable
,并应用于CustomButton
。在应用程序的总生命周期内,这可能会发生多次。这导致OutOfMemoryError: bitmap size exceeds VM budget
,并且在对StackOverflow进行一些挖掘后,发生这种情况是因为Bitmaps
未被回收。所以我尝试使用每次应用另一个背景时执行的代码来处理这个问题(此代码来自CustomButton
类):
public void recycleBackground() {
BitmapDrawable bd = null;
Drawable bg = getBackground();
if (bg != null) {
bg.setCallback(null);
if (bg instanceof BitmapDrawable) {
bd = (BitmapDrawable) bg;
if (!bd.getBitmap().isRecycled()) bd.getBitmap().recycle();
}
bd = null; //just precautionous
bg = null; //also just a precaution
}
然而,记忆很慢(因为背景图像并不是那么大),但肯定会淹没。 我错过了什么或做错了什么?我将上述代码与来自SO的一些不同问题/答案结合起来。我可以在回收Bitmaps
上找到很多,而不是回收Drawables
。也许这就是我做错了什么?