“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”
Application 클래스란 앱이 실행될 때 가장 먼저 인스턴스화 되는 클래스로 Launcher로 설정한, 최초로 실행되는 Activity보다 먼저 인스턴스화가 진행된다.
일반적으로 Activity가 호출되기 전에 작업해야하는 코드나
앱 전역에서 공유되는 데이터를 초기화 하는 등의 용도로 사용된다.
필자는 이 Application 클래스의 onCreate에서
앱 전역에서 쓰이는 값을 초기화하는 코드를 작성했는데
앱을 재실행해도 값이 초기화되지 않고 남아있는 것이다.
현상을 확인해보니 재현경로는 이러했다.
그래서 디버거를 찍어봤더니 Application 클래스의 onCreate()를
호출하지 않은 것이다.
조사해본 결과 원인은 아래와 같다.
Application은 Activity뿐만 아니라 Service, ContentProvider 등을 가지고 있고 OS에서 메모리가 필요할 때 앱이 종료된 상태(여기서는 마지막 Activity까지 Destroy된 상태) 일 때 Application을 종료한다.
그래서 강제종료하면 Application 클래스도 같이 종료되기 때문에
onCreate()가 실행되고
뒤로가기로 종료했을 때는 Activity만 종료되고 Application 클래스는
종료되지 않았기 때문에 onCreate()가 호출되지 않은 것으로 보인다.
추가적으로 위 사이트에서 알게된 것은
Application 클래스는 생명주기가 매우 길기 때문에
Activity의 LifeCycle에 종속성을 갖게되면 메모리 누수가 발생할 수 있다고 하는 것 같다.
ApplicationContext가 AcitivityContext 대신 사용되면
메모리 누수가 일어나는 것과 같은 맥락인 것 같다.
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.