Android回收按钮backgroundDrawable仍会导致OutOfMemoryError

时间:2012-10-10 14:58:38

标签: android bitmap out-of-memory

我有一些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。也许这就是我做错了什么?

0 个答案:

没有答案