-
SavedInsanceState가 저장되는 방식과 복원방식카테고리 없음 2024. 11. 5. 01:13SMALL
SavedInstanceState는 메모리에만 저장되는 것이 아니라 안드로이드 시스템의 디스크 영역에도 임시로 저장됩니다.
프로세스가 종료될 때의 동작 순서를 보면:
// 1. 앱이 백그라운드로 가고 시스템이 프로세스 종료를 결정 class MainActivity : AppCompatActivity() { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) // 2. Bundle 데이터가 시스템의 디스크 영역에 저장됨 outState.putString("key", "value") } } // 3. 프로세스 종료 // 4. 나중에 앱 재시작시 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 5. 시스템이 디스크에서 Bundle 데이터를 읽어서 전달 val restoredValue = savedInstanceState?.getString("key") }
내부 구현을 보면:
- ActivityManager 서비스가 각 앱의 상태 정보를 관리
- 앱의 Bundle 데이터는 시스템의
/data/system/
아래에 저장 - 각 앱의 SavedInstanceState는 고유한 식별자로 관리됨
예를 들어:
// 시스템이 내부적으로 관리하는 형태 (개념적 예시) data class SavedState( val activityId: String, // 액티비티 식별자 val userId: Int, // 사용자 ID val bundle: Bundle // 저장된 데이터 ) // 실제 저장 예시 class MainActivity : AppCompatActivity() { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putParcelable("state", ComplexState( data1 = "value1", data2 = 100 )) // 시스템은 이 데이터를 디스크에 저장 } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 시스템이 디스크에서 데이터를 복원 savedInstanceState?.getParcelable<ComplexState>("state")?.let { // 상태 복원 } } }
그래서:
- 메모리상의 데이터는 프로세스 종료와 함께 사라지지만
- 시스템의 디스크에 저장된 데이터는 유지되고
- 앱 재시작시 시스템이 이 데이터를 다시 전달해주는 방식으로 동작합니다
이는 ActivityManager 서비스가 관리하는 영구 저장소를 통해 이루어지며, 앱 개발자는 Bundle API를 통해 이 메커니즘을 간접적으로 사용하게 됩니다.
LIST