我正在尝试测试一些绘制到Canvas的不同方法,而不会触发垃圾收集。即使是最基本的例子也会导致频繁的gcs。例如:
class Panel extends View {
private int mX = 0;
private Paint mPaint = new Paint();
public Panel(Context context) {
super(context);
mPaint.setColor(0xFFFF0000);
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawRect(mX, 0, mX+40, 40, mPaint);
mX++;
postInvalidate();
}
}
我使用SurfaceView(月球着陆器示例)获得相同的结果。大约每10秒左右一次,在实时游戏中非常震撼。我没有在上面的绘制循环中进行任何分配,所以必须在canvas等类中分配一些东西(不幸的是)。
我在opengl测试中取得了成功,没有gcs,但我希望避免进入opengl。我对它非常熟悉,但是使用opengl绘制一些想要实现的效果会很困难。
由于
答案 0 :(得分:2)
而不是猜测你应该看看what is allocated。
答案 1 :(得分:2)
postInvalidate()可能必须创建一个对象。使用invalidate()代替,没有理由在这里使用postInvalidate()。