0

我有一些CustomButton,在某些时候,背景从 base64String 绘制到 aBitmapDrawable中,应用于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。也许这就是我做错了什么?

4

0 回答 0