2016-09-16 3 views
0

たとえば、ユーザーが特定のキーを押したときに巻き戻しインジケータを表示する必要がある状況があります。 それは私がそれをしない場合、私は、ここで使用することに注意してくださいハンドラとLooper.getMainLooper() AndroidでUIの変更にHandlerを使用することをお勧めします

機能にshowRewind()

public static void showRewind(){ 
     (new Handler(Looper.getMainLooper())).post(new Runnable() { 
      @Override 
      public void run() { 
       rewindText.setVisibility(View.VISIBLE); 
      } 
     }); 
    } 
を呼び出す巻き戻しキーだ場合、私はキーコードをチェックし、onKeyリスナーでキー入力を検出し、 UIがすぐに更新されることはありません。それは私がキープレスで即座にそれを更新するために見つけることができる唯一の解決策であり、それは完全に動作しますが、何とか私は何か正しいことをしていないと感じています。

私はAndroidには新しく、すぐに習得しなければならなかったので、ドキュメントに深く入り込まず、一般的なstackoverflowの実用的なソリューションを使用することはできませんでした。

ここで私はここで何をしているのですか(一般的にはUIを更新するメインルーパーのハンドラを使用しています)、またはキープレスでUIを即座に更新するためのよりよい解決策がありますか?

+0

'runOnUiThread'を試しましたか? https://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) –

+0

それはちょうど同様にうまく動作します、私はそれを使用する方が良いと思いますか? –

+0

ちょっと単純かもしれない –

答えて

0

メインスレッドまたはUIスレッド(マルチスレッド環境でクリティカルセクションとして扱う)を更新する場合は、一貫性のある同期された方法で行う必要があります。そのためには、メインスレッドまたはUIスレッド用のメッセージキューのメカニズムと、それに関連するハンドラがあります。ルーパーはメッセージキューをループして実行されます。したがって、メインスレッドまたはUIスレッドを更新する最も良い方法は、ハンドラを介したもので、基本的なメカニズムになります。メインスレッドまたはUIスレッドを更新するためのユーティリティクラスがある場合でも、それらは順番にこのハンドラメカニズムに依存します。 これは、メインスレッドまたはUIスレッドを更新するための最良の方法です。

関連する問題