안드로이드 개발 질문/답변
(글 수 45,052)
public void onCreate(Bundle savedInstanceState) {
Handler_Login.sendEmptyMessage(0);
}
Handler Handler_Login = new Handler(){ public void handleMessage(android.os.Message msg) { try { Thread.sleep(100); con_h(); } catch (Exception e) { // TODO: handle exception } }; }; public void con_h(){ Connection_H con_h = new Connection_H(korex.this, "GAAAA~2"); con_h.start(); for(int i = 0; i< 100; i++){ Log.w("-->", "Wait"+i); try { Thread.sleep(100); } catch (InterruptedException e) { ; } } con_h.stop(con_h); }
이런식으로 하면 핸들러가 종료될때까지 화면에 아무것도 표시가 안되는데요
액티비티 시작하자마자 전송결과를 받아와야해서요 ㅠ_ㅠ
전송결과에따라 계속할껀지 그냥 종료시킬껀지 결정해야되는건데 이렇게하면
그냥 검은 바탕에 다이얼로그만 떠서 ㄷㄷ
좀더 부드러운 방법이 없을까요 ?
2010.05.29 01:07:44
우선 Handler 생성 시 기본 생성자를 사용하지 않으면, 어플리케이션 메인 스레드 루퍼에 해당 핸들러가 적용됩니다. 따라서 핸들러 내부에 사용하신 Thread.sleep() 함수는 메인 스레드를 슬립시키게 됨으로, 핸들러가 종료될 때 까지 화면에 아무것도 표시가 안되겠네요. 좀 더 부드럽게 구현하시려면, 어플리케이션 실행시 ProgressDialog 등을 이용해서 팝업을 하나 표시하시고, 별도의 스레드에서 체크 작업을 수행하고 작업이 완료되었을 때 해당 팝업 다이알로그를 종료하는 형식으로 구현하시면 어떨까 합니다.