2016-09-16 1 views
0

예를 들어 사용자가 특정 키를 누르면 되감기 표시기를 표시해야하는 상황이 있습니다. 나는, onKey 청취자의 키 누름을 감지 키 코드를 확인하고 되감기 키 나는 기능을 showRewind()Android에서 UI 변경에 Handler를 사용하는 것이 좋습니다.

public static void showRewind(){ 
     (new Handler(Looper.getMainLooper())).post(new Runnable() { 
      @Override 
      public void run() { 
       rewindText.setVisibility(View.VISIBLE); 
      } 
     }); 
    } 

통지 핸들러와 전화입니다 경우 Looper.getMainLooper() 나는 그렇게하지 않으면 내가 여기에 사용 UI가 즉시 업데이트되지 않습니다. 그것은 내가 키 프레스에서 즉시 업데이트 할 수있는 유일한 솔루션이며 완벽하게 작동하지만 어쨌든 나는 올바르게 작동하지 않는다고 느낍니다.

저는 Android에 상당히 익숙하며 매우 빨리 배워야하므로 문서화에 깊이 관여 할 수 없었고 일반적으로 stackoverflow의 실용적인 솔루션을 사용할 수 없었습니다.

내 질문 : 여기 (UI를 업데이트하기 위해 메인 루퍼와 핸들러 사용) 일반적으로 좋은 생각, 또는 거기에 더 나은 솔루션을 즉시 keypress에 UI를 업데이트 할 수 있습니까?

+0

'runOnUiThread'을 시도 했습니까? https://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) –

+0

그래도 잘 작동합니다. 사용하는 것이 좋습니다. –

+0

더 간단 할 수도 있습니다. –

답변

0

메인 또는 UI 스레드 (멀티 스레드 환경에서 중요 섹션으로 간주)를 업데이트하는 경우 일관되고 동기화 된 방식으로 수행해야합니다. 이렇게하기 위해 메인 또는 UI 스레드에 대한 메시지 대기열 메커니즘과 이와 관련된 핸들러가 있습니다. 루퍼는 메시지 대기열을 순환하여 실행됩니다. 따라서 메인 또는 UI 스레드를 업데이트하는 가장 좋은 방법은 핸들러를 통하는 것이며 기본 메커니즘이 될 것입니다. 메인 클래스 나 UI 스레드를 업데이트하는 유틸리티 클래스가있을지라도 그들은 차례로이 핸들러 메커니즘에 의존합니다. 내 관점에서 볼 때, 이것이 메인 또는 UI 스레드를 업데이트하는 가장 좋은 방법입니다.

관련 문제