1

基本的に多くのゲージとインジケーターを備えたダッシュボードである Android アプリを作成しています。メイン アクティビティの onCreate() メソッドに追加されたメイン ビューがあります。各ゲージは、メイン ビューで追加および初期化され、メイン ビューの onDraw() メソッドで描画されるカスタム ビュー オブジェクトです。ゲージ値は、メイン アクティビティの onCreate() メソッドで起動される個々のスレッドによって常に更新されます。スレッドは、ゲージ値を変更する必要があることを検出すると、その変更を行い、特定のゲージを更新 (再描画) する必要があることを伝えるメッセージを (メッセージ ハンドラーを介して) メイン ビューに送信します。メイン ビューのメッセージ ハンドラで invalidate() を使用して画面を更新しています。アプリは問題なく動作しますが、表示の更新をできるだけ効率的に処理できているかどうか疑問に思っています。私の質問は:

メイン ビューで invalidate() を呼び出すと、変更されていないものも含め、すべてのゲージ ビューが再描画されていると想定します。もしそうなら、変更されたゲージのビューを再描画するだけの方が効率的ですか? それを行う最善の方法は何ですか?個々のビューの invalidate() および postInvalidate() メソッドを呼び出してみましたが、どちらも機能しません。

リクエストに応じて、メイン ビューの onDraw メソッドの現在の状態を次に示します。最終的には、より多くのゲージが追加されます。ベゼルは静的で、デバイスが構成 (横/縦) を切り替えた場合にのみ変更されます。さまざまなゲージは、View を拡張する Gauge クラスからインスタンス化されます。

@Override
protected void onDraw(Canvas canvas) {

    speedoBezel.draw(canvas);
    tachBezel.draw(canvas);
    oilPressBezel.draw(canvas);
    oilTempBezel.draw(canvas);

    speedoGauge.draw(canvas);
    tachGauge.draw(canvas);
    oilPressGauge.draw(canvas);
    oilTempGauge.draw(canvas);

}

わかりました、私は Android でアニメーション化する方法をたくさん読んだので、それらを混同し始めました。質問を言い換えたい:

メイン ビューにさまざまなオブジェクトがあり、頻繁に変更されるが間隔が異なるアプリを開発している場合、次のことを行うとパフォーマンスが向上しますか?

  1. オブジェクトをメイン ビューに追加し、メイン ビューで無効化 (rect) を使用して、必要に応じて個別に更新するか、

  2. 各オブジェクトをレイアウトに追加し、更新が必要なときに各ビューで無効化を使用します。

オブジェクトが重複しないことに注意することが重要です

4

0 に答える 0