본문 바로가기
안드로이드

[안드로이드] onDestroy() 언제 호출되나?

by 호군 2012. 3. 7.
반응형
링크 : http://blog.naver.com/PostView.nhn?blogId=huewu&logNo=110081631223


현재 기존 안드로이드폰보다 성능이 낮은 환경에서 개발을 하고 있습니다.
간단한 테스트를 하다가 Activity를 실행했더니 검은색 화면만 나와서 이상함을 느꼈습니다.
다시 실행하니 잘 되더군요. 왜 발생할까?? 이유가 멀까??
그래서 Activity의 생성과 소멸 과정마다 콜백되는 메소드들에 로그를 찍어봤습니다.
로그로는 확신을 들 수 없지만, 실행 했을 때, onCreate() -> onResume()가 호출되고, 종료를 했을 때, onPause()가 호출되었습니다. 그리고 조금 뒤에 onDestroy()가 호출되었지요. 눈으로 확인 하기가 힘들지만, onDestroy() 메소드가 Activity를 실행하는 것 보다 늦게 호출 된 것 같다고 추측이 들었죠. (onStart와 onStop에는 log를 찍지 않았습니다)


관련 사례들이 있나 보다가 휴우님의 글을 보고, 확신을 갖게 됐습니다.
이젠 원인을 알았으니 해결 방법만 찾으면 됩니다.
혹시 이런 경우 좋은 방법이 있나요??



이런 경우는 device가 느리거나 destory 작업에서 많은 것을 처리 할 때 발생하지 않을까 합니다. 저도 발생하는 시점이  onDestory에서 Service 정리와 BroadcastReceiver 등을 해제 할 때 발생하더군요. 특별히 onDestory에서 다른 작업을 처리 하지 않는 App들은 이런 현상이 발생 하지 않았습니다. 

임시방편 해결책
Intent intent = new Intent(Intent.ACTION_VIEW);
... // activity에 대한 명세
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Intent에 Intent.FLAG_ACTIVITY_CLEAR_TOP 플래그를 추가하면, 현재 Activity가 스택이 존재 할 경우 상위 Activity들을 제거하고, 새롭게 Activity가 생성됩니다. 스택에 존재하지 않은 경우에도 생성됩니다.


반응형