프로그래밍/안드로이드

[펌자료] 안드로이드 - 액티비티의 상태를 저장 및 복원하는 콜백 메소드 - onSaveInstanceState, onRestoreInstanceState

가카리 2015. 10. 4. 19:41
반응형

액티비티는 자신의 상태를 저장하거나 복원하는 것이 가능합니다. 이번 포스트에서는 액티비티의 상태를 저장 및 복원하는 콜백 메소드인 onSaveInstanceState와 onRestoreInstanceState에 대해 알아 봅니다.


액티비티의 상태를 저장함의 의미
액티비티의 상태를 저장한다는 것은 액티비티의 모습과 자료 등을 기기의 저장 장치에 저장함을 의미합니다. 여기에서 상태의 뜻이 resumed, paused, stopped 등과 같은 값들 중 하나를 갖는 변수가 아님에 유의하세요.  


액티비티의 상태를 복원함의 의미
종료되지는 않았지만 사용되지 않는 액티비티들은  메모리 부족하면 안드로이드가 강제로 종료 시킵니다. 나중에 사용자가 그것들을 다시 실행할 수 있고, 그것들은 원래의 모습으로 다시 복원됩니다.


액티비티의 상태를 왜 저장하는가?
강제 종료된 액티비티를 안드로이드가 나중에 복원해야 하기 때문입니다.

   
액티비티의 상태는 언제 복원되는가? 
강제 종료 된 액티비티를 사용자가 다시 실행할 때, 그것은 복원 됩니다.  


액티비티의 상태를 저장하는 onSaveInstanceState 메소드
액티비티는 자산의 상태가 running에서 paused로 바뀔 때 onSaveInstanceState 메소드가 onPause보다 먼저 실행 됩니다. 만약에 추가로 저장해야 하는 자료가 있다면, 이 메소드를 오버라이드 하셔야 합니다. 이 때 그것이 슈퍼 클래스인 Activity의 onSaveInstanceState 메소드를 호출함을 잊지 마세요.  그렇지 않으면, 액티비티의 상태가 저장되지 않습니다. 

 

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState); // 반드시 호출해 주세요.
 
    // 추가로 자료를 저장하는 코드는 여기에 작성 하세요. 
}

 
Bundle은 문자열로 식별할 수 있는 자료들을 저장할 수 있는 객체를 정의하는 클래스입니다. outState는 액티비티의 상태를 저장하기 위해 사용되는 객체입니다. 만약 추가로 저장해야 하는 자료가 있다면, outState의 put... 메소드들을 호출하세요. 


액티비티의 상태를 복원하는 onRestoreInstanceState 메소드  
강제 종료 된 액티비티가 다시 실행될 때 onRestoreInstanceState 메소드가 실행 됩니다. 만약 onSaveInstanceState 메소드를 오버라이드 하셨다면, onRestoreInstanceState도 오버라이드 하세요. 그래야 전자에서 추가로 저장했던 자료를 복원할 수 있습니다. 전자와 마찬가지로 슈퍼 클래스 Activity의 onRestoreInstanceState 메소드를 반드시 호출해 주시기 바랍니다. 

 

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
 
    // 추가로 자료를 복원하는 코드는 여기에 작성하세요.
}

 
savedInstanceState 파라메터는 복원할 자료들을 갖고 있습니다. 그것의 get... 메소드를 호출하여 자료를 읽을 수 있습니다.
 
 
onSaveInstanceState, onRestoreInstanceState는 언제 호출되는가?
안드로이드 개발자 사이트에서는 이 메소드들이 언제 호출되는지를 보여주는 그림을 보여줍니다.


 

 


 
원본 이미지의 출처 - http://developer.android.com/guide/topics/fundamentals/activities.html

 

 
마치며...
지금까지 액티비티의 상태를 저장 및 복원하는 콜백 메소드 onSaveInstanceState, onRestoreInstanceState에 대해 알아보았습니다.


출처 : http://netrance.blog.me/110137097968

 


반응형