안드로이드 프로그래밍

Kotlin 싱글톤 사용시 주의 사항

하늘흐늘 2023. 1. 13. 19:15
반응형

싱글톤은 프로세스가 살아 있는 동안 객체가 살아있고 필요한 정보를 한곳에 모울 수 있어 많이 사용하는 방법입니다. 하지만 안드로이드에서는 이 방법을 사용할 때 주의가 필요합니다. 
이유는 안드로이드는 메모리가 부족해지거나 절전 모드에서 필요시 프로세스를 죽이고 사용자가 앱을 다시 전환했을 때 재실행하기 때문입니다. 이 때의 재실행은 앱아이콘을 클릭하여 실행하는 경우와는 틀리게 최상단의 액티비티만이 재생성됩니다. 

이런 경우에 프로세스가 재실행되는 관계로 프로세스 재실행시 싱글톤은 재생성되기 때문에 싱글톤의 내용이 초기화됩니다. 

싱글톤의 사용에 의존하는 경우 갑자기 초기화된 싱글톤을 사용하게 되면 알수 없는 버그가 앱에서 발생할 수 있습니다. 즉, 앱이 실행되는 동안 필요한 영구적인 정보를 싱글톤에만 저장하고 사용하는 것은 조금 위험할 수 있습니다.

이럴 때를 대비하여 사용할 수 있는 간단한 방법은 아래와 같습니다.
1. 프로세스가 죽기전에 실행되는 액티비티의 onSaveInstanceState(Bundle)에서 데이터를 저장했다가 재실행시 실행되는 액티비티의  onCreate(Bundle)에서 싱글톤의 주요정보를 복원하는 것입니다.
2. 주요 정보를 파일, DB등 안드로이드에서 저장할 수 있는 곳에 저장하였다가 싱글톤이 재생성된 것을 체크하여 복원하는 방법입니다. 이 방법같은 경우는 초기화 여부를 담고 있는 간단한 정적 변수를 만들어 체크하고 복원할 수 있습니다. 저와 같은 경우는 이런 문제를 이 방법을 통하여 해결하였습니다.

해당 문제를 테스트하는 방법은 Kotlin 테스트를 위하여 앱 프로세서 죽이는 방법 포스트를 참조하시면 됩니다.

 

반응형