2014-07-17 3 views
-1

저는 최근에 몇 가지 기본적인 Android 앱을 개발해 왔으며 약간 이상한 행동을 느낍니다. 이는 내 잘못이라고 생각합니다.UI 스레드 문제

문제는 UI 업데이트와 블루투스를 통한 메시지 전송과 같은 일부 처리에 사용하는 주 스레드가있는 것 같습니다.

의 다음 I가 있다고 가정 해 봅시다 :

public void sendMessage(){ 
    updateUI(); 
    sendBtMessage(); 
} 

public void updateUI(){ 
    txtView.setText("Sending message"); 
    progressbar.setVisibility(View.VISIBLE); 
} 

public void sendBTmessage(){ 
... connect to BT and send message here 
} 

내가 메시지를 보낸 후 UI 업데이트가 나타나는 첫 번째 (내가 메시지를 보내기 전에 싶습니다)가 sendBtMessage을 실행하는 것으로 보인다 내 코드를 실행으로 . 주 스레드 우선 순위가 가장 무거운 작업 부하를 먼저 수행하기 때문입니다.

UI 만 업데이트하는 데 주 스레드를 사용해야합니까?

아무 것도 제안이나 조언을 부탁드립니다.

+1

이 sendBTmessage에서 실행되는 코드를 게시하시기 바랍니다 사용하여 실행됩니다. 대답은 실제로 연결하는 방법에 따라 달라집니다. –

+0

각 콜백 메소드에서 이러한 함수를 호출합니까? – Sitram

+0

또한 어디에서 sendMessage()를 호출하고 있습니다. 노동 집약적 인 작업을 위해 asyncTasks를 사용하면 UI가 병목이 아닌 것이 좋습니다. – erik

답변

0

내가 같은 새로운 스레드에서 sendBTMessage을 처리하는 데 필요한 밝혀 :

new Thread(new Runnable() { 
    public void run(){ 
     ...processing 
    } 
}).start(); 

과 UI가 원활

RunOnUiThread(Runnable)