単純な描画ループでGCを避けることはできません

android
単純な描画ループでGCを避けることはできません

ガベージコレクションをトリガーせずに、キャンバスに描画するいくつかの異なる方法をテストしようとしています。 最も基本的な例でさえ、頻繁に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秒ごとにGCが実行され、リアルタイムゲームではかなり不快です。 上記の描画ループで割り当てを行っていないので、(残念ながら)キャンバスなどのクラスで何かを割り当てる必要があります。

私はOpenGLテストで成功しましたが、GCSはありませんでしたが、OpenGLを避けたいと思っていました。 私はかなり慣れていますが、openglを使用して達成したかったいくつかの効果を描くのは難しいでしょう。

ありがとう

  2  1


ベストアンサー

推測する代わりに、http://android-developers.blogspot.com/2009/02/track-memory-allocations.html [割り当てられているもの]をご覧ください。

2


postInvalidate()はオブジェクトを作成する必要がある場合があります。 代わりにinvalidate()を使用してください。ここではpostInvalidate()を使用する理由はありません。

2


タイトルとURLをコピーしました