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