안드로이드 개발 질문/답변
(글 수 45,052)
Act.java 라는 파일안에
A라는 - Activity 와 A의 멤버변수로 H라는 핸들러가 있다고 가정하구요.
이 상태에서,
H 핸들러의 메세지에서 finish(); 를 호출하면
Activity가 사라지지 않고 그대로 실행이 되는데요;
여기서 질문입니다.
왜 저럴까요-_-;?
핸들러는 분명히 A 안에서 정의되어 있는데, H에서 A를 종료시키는 finish();를 호출하면 당연히 H도 같이 종료되는 것 아닌가요;
핸들러가 쓰레드이고, Activity도 쓰레드인건 대충 아는데, 왜 이렇게 되는지,..;;
Activity, 핸들러, 쓰레드,, 아 머리가 아파요.ㅜㅜ
그리고 쓰레드와 액티비티에 대해서 잘 설명해주시면 복받으실거에요.ㅜㅜ
2009.11.13 18:17:45
질문하신대로, finish(); 하면 해당 activity가 종료 됩니다.
handler 안에서도 문제가 없습니다.
쓰레드라는 것은 모든 프로세스에 각각 1개 이상씩 존재하는 것입니다.
일반적인 동작은 1방향으로만 동작이 된다고 보면 되죠.
사람들이 그냥 쓰레드라고 언급하는 것은 보통 멀티 쓰레드로...2개 이상의 쓰레드(동작? 흐름?)입니다.
액티비티는 안드로이드에서 일반적으로 보는 [화면]이라고 보면 됩니다.
액티비티를 띄우는 동작 자체도 쓰레드라는게 있는것이지만, 말씀하신 것과는 좀 별개의 의미일 것 같습니다.
ps. 복받고 싶어서 리플 단것 절대 아님~!!!!!!!!!!!
2009.11.14 22:27:42
(추천:
1 / 0)
핸들러는 Handler 클래스 내의 void HandleMessage(Message msg) 함수였나?
그 내에서 돌아가기에 Activity에 대한 context가 없습니다.
그렇기에 this가 Activity A 가 아닌 Handler H 이기에, A.finish() 가 아닌 H.finish()가 호출되기에 Activity가 종료되지 않는
문제가 발생될껍니다 :)
액티비티를 종료하기 위해서는 Context를 받아와야 합니다.
A의 멤버 변수 Context mContext; ( Context 타입 변수)를 만들어주시고
액티비티 생성자 onCreate 에서 mContext = this; 로 현재 액티비티를 넘겨주시고,
핸들러에서 mContext.finish(); 이런식으로 한번 접근해보시겠어요?
현재 윈도우에서 글을 남기는거라 확인을 못해드리네요 ^^;