마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Handler에 대해서 궁금한게 있습니다.

0 추천

현재 프로그래스바를 일반쓰레드에서 구현하기 위해서 몇가지 테스트를 하던중 궁금한게 생겼습니다.

다름이 아니라 아래 소스를 보시면

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(this, SubActivity.class);
startActivity(intent);
finish();
}
 
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
Log.i("handler", "호출됨");
pb.incrementProgressBy(1);
 
};
};
 
단순히 현재 엑티비티에서 핸들메시지를 통해서 다른 쓰레드에서 핸들러로 메시지 보내는걸 캐치하여
프로그래스바를 업데이트 해주는 로직의 일부분입니다.
그런데 제가 궁금한 것은..
버튼 이벤트에 있는 finish()입니다.
다음 엑티비티로 넘어가면서 현재 핸들러처리가 되어 있는 엑티비티를 finish로 종료시키고 넘어가는데
로그에 찍히는 것을 보면 호출됨이라는 로그가 계속 찍힙니다.
제 생각에서는 finish()로 현재 엑티비티를 종료하고 넘어가면 handler 객체도 소멸하여 메시지를 받지 못할 줄 알았는데
현재 엑티비티를 finish하고 다음 엑티비티로 넘어갔음에도 호출됨이라는 로그가 계속 찍힌다는것은
콜백을 계속 받고 있는다는 것인데...
이걸 어찌 이해해야될지 잘 모르겠습니다.
finish로 엑티비티를 소멸시키고 넘어가도 콜백은 계속 받을 수 있는건가요?
갸아악 (21,260 포인트) 님이 2014년 11월 5일 질문

1개의 답변

+1 추천
 
채택된 답변
finish 할 때 메시지를 보내는 스레드를 종료하지 않으면 handler는 메시지를 계속 받습니다.

finish할 때 뒷정리 (스레드 종료 등)는 직접 구현해야 합니다.
익명사용자 님이 2014년 11월 5일 답변
갸아악님이 2014년 11월 5일 채택됨
...