<Android>Configuration change시 UI 상태 저장 방법

진섭·2025년 1월 12일
0
post-thumbnail

📌 UI 상태를 어떻게 저장해야 할까?

안드로이드 공식 문서에 따르면 몇 가지 방법을 알려줍니다.

  • 로컬 저장소 사용(SharedPreference, DataStore, Room)
  • ViewModel 사용
  • Saved instance states
    1. Compose: rememberSaveable
    2. View: onSaveInstanceState() API
    3. ViewModel: SavedStateHandle

이렇게 안드로이드에서는 앱의 안정성을 높이기 위해 상태를 저장할 수 있는 방법을 제공합니다.
그럼 이걸 어떻게 써야 할지 알아보도록 하겠습니다.

📌 어떤 방법으로 저장을 해야 할까?

방법은 크게 3가지로 나뉘는데 상태를 유지한다는 관점은 동일하지만 언제 사용하고 데이터를 담아야 하는지 차이점을 구분해 보겠습니다.

ViewModel

  • Activity나 Fragment가 재생성이 돼도 ViewModel의 생명주기는 살아있어 데이터가 유지됩니다.
  • finish()가 호출되면 시스템에 의해 데이터가 사라짐 ->프로세스 종료가 되면 데이터가 사라집니다.

SavedStateHandle

  • 안드로이드에서 메모리 확보를 위해 앱 프로세스를 종료시키는데 ViewModel만 사용하면 데이터가 유지가 안 되는데 프로세스가 종료된 후 데이터를 다시 로드하려면 SavedStateHandle API와 함께 사용하면 됩니다.
  • Bundle을 사용하여 프로세스 종료 후에도 데이터를 복원이 됩니다.

onSaveInstanceState

  • Configuration change가 발생할 때 Bundle에 데이터 또는 상태를 저장합니다.
  • 간단한 데이터를 저장하는 데 사용합니다. 스크롤 위치 유지할 때 주로 사용합니다.

로컬 저장소

  • SharedPreference, DataStore, Room등이 입니다.
  • 주로 앱 내에 데이터를 영구적으로 저장하는 공간입니다.
  • 복잡하거나 큰 데이터의 프로세스 종료 처리하는데 사용이 됩니다.
  • 애플리케이션이 사용자의 기기에 설치되어 있는 동안 유지됩니다, 단 사용자가 앱 데이터를 삭제하지 않는다는 가정에서요.
  • 하지만 공식 문서에 따르면 UI 상태 저장은 ViewModel,onSaveInstanceState 와 같이 일시적으로 상태와 데이터를 저장하는 것이 Configuration change가 일어날 때 짧은 시간 동안 UI를 유지하는 데 적합하지만 로컬 데이터와 같은 영구적으로 데이터를 기기에 저장하는 것은 데이터를 검색하는 데 비용이 많이 들어 적합하지 않다고 합니다.

📌 참고 자료

UI 상태 저장 공식문서
구성 변경 처리 공식문서
Configuration change + Multiple screen size 대응 시 키워드 정리
[Android] 안드로이드의 UI 상태 저장, onSaveInstanceState
UI 상태 관리를 할 때 어떤 것들을 고려할 수 있을까

0개의 댓글

관련 채용 정보