-
[Android/Kotlin] onSaveInstanceState()와 onRestoreInstanceState()Android/Kotlin 2022. 10. 19. 20:38반응형
[모든 포스팅은 개인적 공부를 위해 작성된 글입니다
*화면 회전에 대비하는 경우 지금 설명하는 메서드 보다는 ViewModel을 사용하는 것이 더욱 효과적*
<onSaveInstanceState()>
- onPause() 호출 후 액티비티 파괴되기 전 데이터 저장할 때 호출
<onRestoreInstanceState()>
- 액티비티 파괴 후 재생성 시 onStart() 메서드 호출 후 호출
<액티비티가 종료되는 상황>
- 1. 뒤로가기 키 누름
- 2. finish() 호출
- 3. 시스템에 의한 종료(화면 회전 또는 홈 키를 눌러 장시간 화면에 보이지 않는 상태인 경우)
<액티비티 화면 회전시 호출 메서드 순서>
- onPause() -> onSaveInstanceState() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> (onRestoreInstanceState() ->) onResume()
- 위의 상황에서 액티비티를 다시 그림에 의한 데이터 손실을 막기 위해 데이터 저장해 둘 수 있도록 onSaveInstanceState() 메서드 호출됨
- onSaveInstanceState() 메서드는 onPause()와 onStop() 사이에서 항상 호출되지만 onRestoreInstanceState()는 강제 종료 된 경우에만 호출(화면 회전, 시스템에 의한 강제 종료 상황에서만 호출됨/이와 같은 이유에서 onSaveInstanceState()와 onRestoreInstanceState()는 생명주기 메서드가 아님)
<onSaveInstanceState() 사용>
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) }//onCreate
- 기본적으로 생성되는 onCreate() 메서드는 위와 같이 매개변수로 savedInstanceState가 넘어옴(데이터 회복은 onCreate() 보다는 아래에서 설명 할 onRestoreInstanceState()에서 주로 이루어짐)
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if(savedInstanceState!=null){ val str = savedInstanceState.getString("key","value") } }//onCreate
- savedInstanceState가 null인지 체크하여 null이 아니라면 해당 값을 가져올 수 있음
override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putString("key","value") }
<onRestoreInstanceState() 사용법>
override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) val str = savedInstanceState.getString("key") }
반응형'Android > Kotlin' 카테고리의 다른 글
[Android/Kotlin] 어플리케이션 클래스(Application Class) (0) 2022.10.21 [Android/Kotlin] 인텐트 플래그(Intent Flag) (0) 2022.10.20 [Android/Kotlin] 커스텀 뷰(Custom View) (0) 2022.10.18 [Android/Kotlin] Glide 라이브러리 사용 방법 (0) 2022.09.12 [Android/Kotlin] MaterialCalendarView 커스텀 (0) 2022.09.08