메인 GUI 쓰레드에서 Background 로 동작하는 쓰레드를 만들어 놓고,
Network 쓰레드에서 메인 GUI 에 있는 Background 쓰레드를 호출하면 해결이 가능합니다.
private void mainProcessing()
{
// 시간이 많이 드는 작업을 자식 스레드로 옮긴다.
Thread thread = new Thread(null, doBackgroundThreadProcessing, "Background");
thread.start();
}
// 백그라운드 처리 메서드를 실행하는 Runnable.
private Runnable doBackgroundThreadProcessing = new Runnable()
{
public void run()
{
backgroundThreadProcessing();
}
};
// 백그라운드에서 몇 가지 처리를 수행하는 메서드.
private void backgroundThreadProcessing()
{
Log.d("Thread Start", "Thread Start~!");
try
{
//+
// [...시간 소모적인 작업들...]
//-
handler.post(doUpdateGUI);
}
catch (Exception ex)
{
ex.toString();
}
}
// GUI 업데이트 메서드를 실행하는 Runnable.
public Runnable doUpdateGUI = new Runnable()
{
public void run()
{
updateGUI();
}
};
public void updateGUI()
{
// [...다이얼로그를 오픈하거나 GUI 요소를 수정할 수 있다...]
}
제 경우는 메인 GUI 가 있는 Activity 에서 위 코드 그대로 입력 후
mainProcessing() 만 호출하여 소켓 통신 동작 시켰더니, 큰 문제없이 동작하더군요.
주석 참고하시고 한번 해보세요.
출처: 리토 마이어의 빨간책
'Android' 카테고리의 다른 글
전체화면 사용하기 (Status bar, Title bar 숨기기) (0) | 2010.01.15 |
---|---|
SQLite Database Browser (0) | 2010.01.14 |
AlertDialog (0) | 2010.01.13 |
TextView에 텍스트 파일 내용 출력 에러문제.... (0) | 2009.12.17 |
안드로이드에서 화면 회전시 나타나는 문제- Android Screen Rotation Issue (0) | 2009.12.16 |