在简单的绘制循环中无法避免GC

时间:2011-08-30 17:49:19

标签: android

我正在尝试测试一些绘制到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绘制一些想要实现的效果会很困难。

由于

2 个答案:

答案 0 :(得分:2)

而不是猜测你应该看看what is allocated

答案 1 :(得分:2)

postInvalidate()可能必须创建一个对象。使用invalidate()代替,没有理由在这里使用postInvalidate()。