본문 바로가기

ANDROID/Performance

[Android] Android lifecycle과 savedInstanceState

안드로이드의 시작과 끝은 Activity와 Fragment의 lifecycle이다 할 수 있을 정도로 lifecycle에 대한 중요성은 여러번 말해도 모자르지 않다 싶다.

 

이전부터 개발자들이 가져왔던 고민들은 앱의 화면방향 전환이 일어나는 경우, 언어가 변경되는 경우, 화면 해상도가 변경되는 경우 등 

 

다양한 변수로 인해 기존의 Activity 혹은 Fragment가 destroy된 이후 다시 재생성되는 케이스를 어떻게 대처할 것인지 일 것이다.

 

이러한 환경에서 주요 변수를 보존하기 위해 안드로이드는 savedInstanceState를 제공한다.

 

재생성 및 savedInstanceState에 관해 중요한 내용들을 간단히 정리해 보았다!

 

Activity 및 Fragment

  • Activity가 Background에 진입하게 되면 onStop 이후 onSavedInstanceState로 필요한 정보를 저장한다.
  • Activity가 재생성되는 경우 onStart 이후 onRestoreInstanceState로 저장한 정보를 로드한다.
  • 현재 Activity 이전 onStop 이후 상태에 있던 Activity가 있는 상황에서 재생성이 일어나는 경우, 재생성 이후 이전 Activity로 복귀시 onDestroy > onCreate > onStart > onRestoreInstnaceState > onResume의 lifecycle을 거치게 된다.
  • 현재 Activity 이전 onStop 이후 상태에 있던 Activity가 있는 상황의 앱이 백그라운드에 있고, 여기서 process kill이 일어나는 경우, 재생성 이후 이전 Activity로 복귀시 onCreate > onStart > onRestoreInstnaceState > onResume의 lifecycle을 거치게 된다.
  • 투명 Activity를 Activity에서 새롭게 수행하는 경우, 투명 Activity가 onStart를 거친 이후에도 onPause 외에는 onStop이나 saveInstanceState를 거치지 않는다.
  • Fragment는 Activity와 생명주기를 함께하며, onStop 이후 onSavedInstanceState도 동일하게 수행한다.

Android ViewModel

  • AAC의 ViewModel을 사용하는 경우, ViewModel의 생명주기는 선언되고 사용되는 시점부터 사용처인 Activity가 onDestroy되기 이전까지는 onCleared를 거치지 않는다.
  • 따라서 상태 변경 및 재생성으로부터 AAC ViewModel은 자유롭다.
  • 하지만 AAC ViewModel도 시스템에서 수행하는 process kill로 앱의 프로세스가 죽게 되면, 마찬가지로 갖고 있던 데이터가 소실되게 된다.
  • 이를 방지하고자 한다면, savedStateHandle을 ViewModel에 선언해 사용하면 된다.(혹은 DB를 활용한다)
  • savedStateHandle 사용 예는 아래를 참고하자 : https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate

 

< 참고 >

 

Pluu Dev - Android 상태 저장의 기본에서 Savedstate까지

[요약] Deep dive into Jetpack Compose layouts (Android Dev Summit '21) Posted on 14 Nov 2021 [요약] Implementing Material You using Jetpack Compose (Android Dev Summit '21) Posted on 13 Nov 2021 [요약] Kotlin Flows in practice (Android Dev Summit '21

pluu.github.io

 

The Android Lifecycle cheat sheet — part II: Multiple activities

In this series: * Part I: Activities — single activity lifecycle * Part II: Multiple activities — navigation and back stack (this post)…

medium.com