안드로이드 개발 질문/답변
(글 수 45,052)
어떤 키워드로 검색해봐도 제가 막힌부분을 해결할 답이 안나와서 질문을 올립니다.
제가 만들고 있는 어플은 게임종류인데
일단 실행하면 액티비티를 실행하고 뉴 게임버튼을 누르면 new intent해서 새로운 액티비티를 불러오게됩니다.
새로운 액티비티에서 스레드와 더블버퍼링을 사용해서 그림을 그리는것까진 잘 되는데 종료시점이 문제입니다.
그냥 esc키를 누르면 전 액티비티로 가긴하는데 "응답없음" 강제종료 할건지 물어보는 창이 나옵니다.
비단 이뿐만이 아니라 스레드 내부에서 join()을 해주고 새로운 액티비티에서 finish()를 해줘도 위와같이 응답없음이 나옵니다.
이 문제를 어찌 해결해야 할까요 ㅠㅠ 지금 디버그 모드로 관찰해본 결과 thread도 제대로 종료되지 않는것같습니다.
스레드 join()후에는 canvas에 접근하지 않고 사용한 이미지 모두 리사이클 하고 그냥 종료메세지만 보내줄 뿐인데 왜이럴까요
2010.02.02 01:23:12
응답없음(ANR)은 일정시간 이상 UI쓰레드에 반응이 없을때 나타납니다. join등의 과정에서 메인쓰레드(UI쓰레드)를 너무 오래동안 블락하는 것은 아닌지 확인해보세요.
2010.02.02 15:44:53
해결을 하였습니다 원인은 제가 이곳저곳 finish()와 join()을 너무 썼던 탓이였던것 같습니다.
만약 키보드 입력처리에 finish()를 넣고 onDestroy에서 finish()를 또 쓰면 강제종료 문구가 뜹니다.
그리고 한가지 이유를 모르겠는건 쓰레드 클래스 내부에서 join()을쓰면 잘 작동하지만 외부 클래스에서 스래드 클래스 객체를 만들어서 join을 쓰면 제대로 작동하지 않는점입니다. 이것에 대해서 아시는분 있으면 좀알려주세요~
그리고 finish를 하면 스레드를 종료시키지 않아도 얼마 지난후 알아서 스레드를 종료 시키더군요 따로 join()등을 사용할 필요가 없는것 같습니다.
ps)제가 직접 디버그 하면서 해본것이라 100%옳다고 장담할수 없습니다.
만약 키보드 입력처리에 finish()를 넣고 onDestroy에서 finish()를 또 쓰면 강제종료 문구가 뜹니다.
그리고 한가지 이유를 모르겠는건 쓰레드 클래스 내부에서 join()을쓰면 잘 작동하지만 외부 클래스에서 스래드 클래스 객체를 만들어서 join을 쓰면 제대로 작동하지 않는점입니다. 이것에 대해서 아시는분 있으면 좀알려주세요~
그리고 finish를 하면 스레드를 종료시키지 않아도 얼마 지난후 알아서 스레드를 종료 시키더군요 따로 join()등을 사용할 필요가 없는것 같습니다.
ps)제가 직접 디버그 하면서 해본것이라 100%옳다고 장담할수 없습니다.