我有一个应用程序,其中包含一些片段,其中一个片段 我有一个自定义视图,我在其中创建了几个位图来绘制它们。
问题是: 当我交换片段时,一切都很好,直到我到达自定义视图所在的那个。问题是,当我一次又一次地选择片段(具有CustomView)时,RAM会增加然后应用程序崩溃。
我已经检查了位图的创建和回收方式,但我找不到解决方案。
代码:
private Bitmap getCircle() {
if (mDstBitmap == null) {
mDstBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
c = new Canvas(mDstBitmap);
c.drawColor(Color.TRANSPARENT);
p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.RED);
c.drawOval(new RectF(0, 0, mWidth, mHeight), p);
}
return mDstBitmap;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int viewWidthHalf = getWidth() / 2;
int viewHeightHalf = getHeight() / 2;
float radius = 0.0f;
if (viewWidthHalf > viewHeightHalf)
radius = (viewHeightHalf / 2);
else
radius = (viewWidthHalf / 2);
circle = getCircle();
canvas.drawBitmap(circle, 0, 0, mBitmapPaint);
}
我正在考虑这样的事情,但这不起作用:
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
delete();
}
public void delete(){
if (mDstBitmap != null) {
mDstBitmap.recycle();
}
if (linesBitmap != null) {
linesBitmap.recycle();
}
}
答案 0 :(得分:0)
您应该将删除功能移至onDestroy
。更好的是,将其移至onPause
,但请确保将位图变量设置为null,以便在需要时重新创建它们。
我希望您绘制的位图还有更多内容,因为它没有理由在onDraw
调用中将其绘制到画布上,并跳过创建位图。