2014-04-29 4 views
0

현재 스레드에서 HandlerThread로 메시지를 보내야하지만 sendmessage 호출이 즉시 반환되지 않도록해야합니다. 이 sendMessage()를 차단하는 방법이 있습니까?HandlerThread를 통해 차단 메시지를 보내는 방법은 무엇입니까?

+1

차단 중입니까? 왜 그럴거야? – pskink

+0

글쎄 나는 별도의 스레드 내부에서 UI 업데이트를해야하고 다른 스레드에서 계속하기 전에 UI 업데이트가 완료 될 때까지 기다리고 싶습니다. – ravindu1024

+0

시도한 코드를 게시하십시오. –

답변

0

이것은 해결책이라고 생각합니다.

// This handler will be associated with the UI thread 
Handler uiHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
    textView.setText("Progress: " + msg.what);   
    } 
}; 

private void CreateThread() { 
    Thread t = new Thread() { 
    public void run() { 
     for(int i = 0; i < cnt; i++) 
     { 
     try { 
      Thread.sleep(1000); 
     } catch (Exception e) { 
      Log.v("Error: ", e.toString()); 
     } 

      // You can update the UI by sending messages to the UI thread 
      uiHandler.sendMessage(uiHandler.obtainMessage(i)); 
     } 
     } 
    } 
    }; 
    t.start(); 
} 
+0

불행히도 없습니다. 이상적으로 일어날 일은 uiHandler.sendMessage (uiHandler.obtainMessage (i)); uiHandler가 메세지의 처리를 완료 할 때까지 복귀 할 것은 없습니다. Visual C++ sendmessage는 이런 식으로 동작합니다. – ravindu1024

0

Exchanger 클래스를 살펴보십시오. 나는 교환기를 만들고, 그 교환기에 접근 할 수있는 Runnable을 보내고, 그 교환기에서 동기화 할 것이다. 이 방법은 교환기가 나에게 비동기 적으로 얻은 결과를 줄 것입니다. 메시지와 함께 작동하는 것을 생각해 낼 수 있습니다.

Exchanger.exchange()을 호출하는 스레드는 오랜 시간 동안 기다려야 할 수도 있습니다. UI 스레드에서 호출하면 ANR이 표시 될 수 있습니다.

관련 문제