-2

こんにちは、サーフェス ビューを使用して画面に描画する 1 つのスレッドと、画面上のオブジェクトの位置を更新する別のスレッドがあります。これらを同じ速度で実行するにはどうすればよいですか?

4

3 に答える 3

1

トレードオフがあります:

  • すべての動きが滑らかに見えるように、十分な頻度でその画面を更新する必要があります。
  • 主力スレッドにできるだけ多くの CPU を割り当てたい

簡単な解決策は次のようなものです。

  1. ワーク ホース スレッドは、再描画に値する変更があったことを示すフラグを設定します。
  2. UIスレッドには、このような流れがあります

    do {
        renderScreen();
        while (!screenNeedsRedrawing) {
            Thread.sleep(10);
        }
    }
    
于 2013-07-17T16:06:09.647 に答える
1

OSハンドラーを使用する

ワーカースレッドのコンテキストでハンドラーを作成し、呼び出したいランナブルで .post() を呼び出す必要があります。描画するたびにこれを行うと、更新内容がワーカー スレッドに投稿されます。ここで、更新が完了するまで描画スレッドをロックしたい場合があります。この場合、更新が完了するまで描画スレッドを強制的に待機させるスレッドセーフ変数のようなものが必要になります。

于 2013-07-17T16:11:22.733 に答える
1

非常に単純です。ハンドラーまたはメソッドを使用してメイン スレッドへのコールバックを作成し、runOnUiThread更新する必要があるときはいつでもワーカー スレッドから UI を更新するだけです。

于 2013-07-17T15:59:21.753 に答える