안드로이드 개발 질문/답변
(글 수 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함수 내에서 사용해주시면 될 듯 해요.
그럼 좋은 하루 되세요. ^^ 


