안드로이드는 OS가 메모리가 부족해질 때나 절전 모드상태에서 앱을 죽이는(kill) 경우가 발생할 수 있습니다. 이런 경우는 앱을 처음 실행될 때와는 다르게 앱이 죽기 전에 마지막 실행한 액티비티를 안드로이드는 실행합니다. 여기서 실행한다는 말은 onCreate, 즉 아예 생성부터 다시 한다는 말입니다. 참고로 이 경우 최상단 액티비티 이전의 액티비티들은 재생성되지 않고 다시 생성된 최상단의 액티비티가 finish() 명령을 사용한 경우 처럼 닫혀 이전 액티비티가 최상단 액티비티가 될 때 역시 생성부터 다시 됩니다.
메모리가 부족한 상태에서 앱이 안드로이드 OS에 의하여 죽었을 때 앱 전환시의 스크린샷이 그대로 남아있어 앱 전환 스크린 샷을 클릭하면 앱은 전환됩니다. 이 때 내부적으로 앱은 재시작됩니다.
실제로 이런 경우를 테스트하지 않으면 알 수 없는 에러가 앱에서 발생합니다. 이런 경우에 대한 안드로이드 스튜디오의 에뮬레이터를 이용한 테스트 방법은 아래와 같습니다.
우선, 에뮬레이터는 구글 플레이 마크가 없는 것이어야 합니다.
구글 플레이 마크가 있는 에뮬레이터는 adb가 root권한을 가질 수 없어 프로세스를 죽일 수 없습니다.
1. 테스트할 앱을 실행합니다.
2. 에뮬레이터에서 테스트한 앱 이외의 앱으로 화면을 전환합니다.
3. 콘솔에서 adb shell pidof <팩키지이름> 으로 앱 프로세스 아이디를 검색합니다.
i.e. adb shell pidof com.gosae.project13
결과>> 6807
4. 3번 과정에서 알아낸 프로세스 아이디로 프로세스를 죽입니다.
i.e. adb shell kill -9 6807
5. 에뮬레이터에서 테스트할 앱으로 전환을 합니다.
-->> 이 경우 앱이 재시작되고 이런 경우 정상 작동되는지 확인할 수 있습니다.
디버거는 프로세스를 죽인 순간 더 이상 작동하지 않으니 참고바랍니다.
앱에 문제가 있을 경우의 해결책은 다양한데 흔한 해결책은 onSaveInstanceState(Bundle)함수를 이용하는 방법이 있습니다. 좀 더 자세히 알고 싶으시면 아래 글을 추천합니다.
What happens when you leave Android app in background for a while?
'안드로이드 프로그래밍' 카테고리의 다른 글
Kotlin 싱글톤 사용시 주의 사항 (0) | 2023.01.13 |
---|---|
안드로이드 프로그래밍 정복 (0) | 2013.06.08 |