1

私のAndroidアプリでは、ユーザーの操作によって頻繁に変化する長方形、線、円弧をたくさん描いています。

これで、onDraw()メソッド内にPaintオブジェクトが作成され、ローカル変数のままになり、メモリの問題が発生しなくなりました。

しかし、コードレビュー中に、これは間違いとして指摘されました。onDraw()が呼び出されるたびにnew()が呼び出されるため、これによりキャンバス上の描画が遅くなる可能性があると言われています。そのため、Paintオブジェクトをクラス変数として作成し、それらを1回だけ初期化し、onDraw()でプロパティを変更するだけで、画面が閉じたり破棄されたりしたときにさらに無効にするように求められます。

画面のUIが遅いとは思わなかったので、これが正しいことなのか、それとも以前の状態の方が良いのかを尋ねたいと思います。これが不必要な変更である可能性はないと思います。

提案を提供してください。

4

2 に答える 2

2

Paint paint = new Paint();処理中に遅延があることがわかりましたonDraw()paintここでクラス変数を作成しonDraw()、既に構築されている Paint 変数の属性を単純に変更します。

    public void onDraw(Canvas canvas) {
        mPaint.setColor(Color.BLUE);
        ...
        mPaint.setStyle(Style.FILL); 
        ...
    }
于 2013-01-03T12:06:16.473 に答える
1

はい、ペイントをクラスメンバーとして使用する必要があります。Paint のサイズはおそらく小さく、私が気にしたわけではありませんが、単なる設定コンテナーです。

特に古いデバイスでは、GC が起動して非常に顕著な不具合が発生する可能性があるため、Draw でオブジェクトを割り当てることはお勧めできません。

于 2013-01-03T12:08:45.800 に答える