안드로이드 개발 질문/답변
(글 수 45,052)
private MyThread myThread; private ProgressDialog progressDialog; // 실행 메서드 구문 내용입니다. -- Start showDialog(0); threadCourseInsert = new CourseInsertThread(); threadCourseInsert.start(); // -- End class MyThread extends Thread { public void run() { myHandler.sendEmptyMessage(0); } } Handler myHandler = new Handler() { public void handlerMessage(Message msg) { dismissDialog(0); Toast.makeText(MyActivity.this, "완료.", Toast.LENGTH_SHORT).show(); } }; protected Dialog onCreateDialog(int id) { switch(id) { case 0: progressDialog = new ProgressDialog(this); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setTitle("MyInfo"); progressDialog.setMessage("진행 중..."); progressDialog.setCancelable(false); return progressDialog; } return null; }
ProgressDialog를 실행하고 Thread가 다 돌면 Handler에서 ProgressDialog를 없애줄려고 합니다.
그런데 실행해보니 ProgressDialog는 뜨는데 계속 돌고 없어지지가 않네요.
디버깅을 해보니 myHandler.sendEmptyMessage(0); 는 거치는데
Handler안에 있는 구문은 거치지가 않습니다.
왜그러는지 도저히 모르겠네요 책 예제와 거의 동일한데 말이죠..
어떤 문제점이 있을까요?
2010.09.06 17:09:56
오타가 있으신거 같네요.
MyHandler 에서
handleMessage 가 아니라 handlerMessage 라는 메서드를 구현하셔서 그런듯. (r 을 빼세요)
2010.09.08 18:24:14
MyThread는 어디에서 만드신거죠?
threadCourseInsert =
threadCourseInsert =
new
CourseInsertThread(); <<- threadCourseInsert가 MyThread인가요?
위의 소스코드로 보아서는 MyThread가 실행안된거 같네요.
MyThread m = new MyThread(); 이렇게 해주시고
m.start(); 해야하지 않을 까요? ^^;
지나가다 답변남겨보아요.
Thread가 여러 개 생길 수 있으니 아래의 방법도 좋을 듯 해요.
MyThread class 안에 mHandler 선언해주시고 생성자를
MyThread (Handler h) {
mHandler = h;
}
이렇게 해주신다음에 Thread 생성하실때 파라메타로 해당 handler를 넣어 주시고
run함수 내에서 사용해주시면 될 듯 해요.
그럼 좋은 하루 되세요. ^^