IT_Programming/Android_Java

android:launchMode, singleTop과 singleTask의 차이

JJun ™ 2014. 7. 18. 15:48



 출처: http://mazdah.tistory.com/600



일단 이 내용은 공식적인 기술 문서에 의한 것이 아니라 전적으로 개발상의 경험으로 정리한 내용이니 착오 없으시길 바랍니다.


문제의 발단은

현재 회사에서 운영 중인 앱의 안드로이드 버전에서 이전 버전은 홈버튼을 놀러 앱을 종료한 후 재실행 할 경우
바로 직전 화면으로 들어가는데 
가장 최근 배포한 버전은 위와 같은 경우 다시 처음 로그인 화면부터 뜬다는 것이다.


로그를 확인해보니 이전 버전에서는 홈 버튼을 누른 후 재실행시 onCreate(), onResume() 어느 함수도 실행되지 않았는데
최근 배포버전은 onCreate()와 onResume()을 차례로 호출하고 있었다.


계속 검색하고 소스 코드 분석 하고 하던 중 마지막으로 확인하게 된 것이 AndroidManifest.xml 파일의 메인 Activity에 설정되어있는 android:launchMode 속성...


이전 버전 소스와 비교를 해보니 이전 버전은 이 설정 값이 singleTop으로 되어있는데 최신 배포버전에는 이 설정값이 singleTask로 되어있었다.


검색한 내용으로는 singleTop의 경우 이 값이 설정된 Activity는 호출되면 호출된 것 만큼 생성을 하는데다만
기존에 생성된 것이 있다면 이것을 재활용 하게 된다고 한다.
따라서 이 경우에는 기존에 떠있는 프로세스를 그대로 사용하기에 onCreate()가 호출되지 않는 것이다.


하지만 singleTask의 경우 이 값이 설정된 Activity는 호출되면 기존 Activity를 죽이고 새로 instance를 생성하기 때문에 항상 onCreate()부터 시작하게 되는 것이다.


이렇게 홈 버튼으로 앱 종료 후 재실행 할 때 onCreate()의 호출 여부로도 singleTop과 singleTask의 차이를 확인할 수 있다.