ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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")
    }

     

    반응형

    댓글

Designed by Tistory.