
액티비티 생명주기의 어느 타이밍에 호출되는지 보기 위하여 생명주기 표를 또 꺼내본다.

그나마 이해하기 좋은 짤을 뽀려왔다.. 보면 알겠지만 onsaveInstanceState는 onPause() 혹은 onStop() 이후에 호출되고, 저장된 데이터는 onCreate() 와 onRestoreInstanceState()의 savedInstanceState 에서 불러 올 수 있다.
onSavedInstanceState 콜백에 저장하고, onCreate에서 꺼내 쓰자!!// onCreate(~)
// 저장된 SavedInstanceState 값이 null이 아니면 그 배열값을 datas에 저장하자
datas = savedInstanceState?.let {
it.getStringArrayList("datas")?.toMutableList()
} ?: let {
mutableListOf<String>()
}
// onSavedInstanceState
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putStringArrayList("datas", ArrayList(datas))
}
ActivityResultLauncher)onSavedInstanceState() 콜백이 호출됐을 때

onSavedInstanceState가 호출된다. 당요니onSavedInstanceState는 빈 값이다. 그 후 B 액티비티에서 첫번째 투두를 작성 후 저장을 눌렀고, OnptionsItemSelected에 저장이 되었다.ActivityResultLauncher에서 getStringData로 B 액티비티에서 작성한 first todo가 기록되었다. 정리
- 결론적으로 내가 헷갈렸던 이유는,,, onSavedInstanceState가 액티비티가 시작할 때 호출된다st로 이해했던 것 때문같다.
- onSavedInstanceState는 액티비티가 멈출 때 호출된다!! 이 때 이전 액티비티에서 받은 값을 bundle에 저장하는 것임.
- 액티비티가 재실행될 때는 번들에 저장되어있던 데이터를 불러온 후 여기에 이전 액티비티에서 받은 값을 추가하고, 또 B 액티비티가 시작하면 onSavedInstanceState에 저장하는것!!
화면 회전, 기기 퍼미션 등의 짧은 정보 저장에만 얘를 쓴다고 한다,, 그러므로 다음 글에서는 Viewmodel을 이용한 방법을 공부해보려한다. 이상