안드로이드 개발 질문/답변
(글 수 45,052)
이 소스 한줄 때문에 뭐하느건지 3일동안....
쓰레드 사용법을 자세하게 가르쳐 주실분을 찾아요,...
참고로 막힌 소스는 아래에 있습니다..
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
DialogPro();
}
});
}
}).start();
안에 있는 DialogPro(); 요게 실행이 안되네요..
부탁 드리겠습니다..
2010.10.08 10:54:47
Thread는 Activity가 실행되면서 기본적으로 구현하지 않아도 Main Thread가 돌아요. 하지만 저렇게 또하나의 Thread를 만들수도 있지요.
그렇게 되면 Thread가 돌때 필요한 Looper( Message Queue에 쌓여져 있는 이벤트나 별도의 쓰레드에서 보낸 메세지들 MainThread에 전달),Handler(메세지 처리담당) 것들을 명시적으로 구현할 수 있고요. 그리고 run()메소드는 쓰레드가 동작하면서 실행하는 것들이겠죠
여기 Thread에는 왜 run()메소드가 2개인지 이해가 잘 안가네요...그리고 DialogPro()가 정의되어 있다면 run()메소드 안에서 실행되어야 합니다.
그렇게 되면 Thread가 돌때 필요한 Looper( Message Queue에 쌓여져 있는 이벤트나 별도의 쓰레드에서 보낸 메세지들 MainThread에 전달),Handler(메세지 처리담당) 것들을 명시적으로 구현할 수 있고요. 그리고 run()메소드는 쓰레드가 동작하면서 실행하는 것들이겠죠
여기 Thread에는 왜 run()메소드가 2개인지 이해가 잘 안가네요...그리고 DialogPro()가 정의되어 있다면 run()메소드 안에서 실행되어야 합니다.




Main Thread는 UI에 접근할 수 있기 때문에 handler를 사용하거나 runnable object를 사용해야 됩니다.
예를 들어 위의 내용을 실행시키기 위해서는
private Thread backTread;
public void threadTest() {
backTread = new Thread(new Runnable() {
public void run() {
try {
mHandler.sendMessage(mHandler.obtainMessage());
}
}
});
backTread.start();
}
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
DialogPro();
}
};
이런식으로 Thread에서 Handler를 호출해서 처리를 해야 될 것 같네요,,