안녕하세요?


지난번에 onSaveInstanceState()와 onRestoreInstanceState()메소드를 실습해 보았지만, 그 결과가 영 시원치 않아서 실패라고 결론을 내린적이 있었을 것입니다.


링크 : 안드로이드 스튜디오 독학하기 38.5일-이번 시도는 시원찮습니다.


그런데 도서관에서 관련된 서적을 여러권 찾아보니, 이게 실패가 아니고 성공이었다는 내용이었습니다. 이번 포스팅에서는 그 내용을 다루고자 합니다. 우선은 지난번 포스팅의 코딩을 그대로 가져와서, onSaveInstanceState()메소드 부분을 /* */로 주석처리를 합니다. 


먼저 USB로 연결이 된 스마트폰에서 앱을 실행시키고 입력상자에 '홍길동'이라고 입력을 하였습니다. 그리고 나서 화면 회전의 잠금을 해제하고 한번 화면을 세로에서 가로화면으로 기울여 보았습니다.



화면을 기울인 것 만으로도 위 스크린샷에서 보실 수 있는 것처럼, 홍길동이라고 입력한 내용이 그대로 사라져 버리는 것을 볼 수 있습니다. 그래서 아래와 같이 코딩을 바꾸도록 하였습니다.



코딩의 내용은 간단합니다. 먼저 저장을 하기 위한 onSaveInstanceState()메소드는 다음과 같은 식으로 코딩을 하였습니다.


public void onSaveInstanceState(Bundle 변수1){

   String 변수2 = 입력상자.getText().toString();

   변수1.putString("데이터 이름", 변수2);

}


그리고 이어지는 onRestoreInstanceState()메소드는 다음과 같은 식으로 코딩을 하였습니다.


public void onRestoreInstanceState(Bundle 변수1){

  super.onRestoreInstanceState(변수1);

  String 변수3 = 변수1.getString("데이터 이름");

  입력상자.setText(변수3);

}


이렇게 코딩을 한 결과는 다음과 같았습니다. 



이번에는 화면을 회전시켜도, 입력했는 '홍길동'이 날라가지 않는 것을 제대로 확인할 수 있었습니다. 그런데 무엇이 문제였길래 지난번에는 실패한 것으로 생각했느냐 했더니, onSaveInstanceState()와 SharedPreferences를 이용해서 저장한 것이 차이가 있다는 것이였습니다.


onSaveInstanceState() = 임시적인 정보

SharedPreferences = 영구적인 정보


일단 영구적인 정보는 앱을 종료해도 저장이 되고, 심지어 기기를 재부팅하여도 저장이 되는 정보를 의미합니다. 그런데 반대로 임시적인 정보란 것은 앱이 실행되는 동안만 저장이 되고, 뒤로가기 두번을 눌러서 정상적으로 종료를 하면 자연히 소멸하는 저장방식이라고 합니다.


이러니 지난번에 앱을 종료했다가 다시 시작했을 때 입력상자에 들어간 내용이 사라진 것이 다 설명이 된다는 생각이 듭니다. 아무튼 임시적인 정보는 영구적인 정보 저장방법에 비해서, 장점이 있다고 하면 하나 있는 것이 일단 저장된 정보를 불러오는 onRestoreInstanceState()에서 if구문으로 저장된 내용이 비었는지 체크할 필요가 없다는 것입니다. 그리고 앱 안에 따로 파일을 생성하지 않는다는 장점이 있지만, onPause에 저장메서드를 생성하는 방법에 비해서 저장되는 기간이 비교도 안되게 짧다는 것이 단점이라는 생각이 듭니다.


참고로 영구적인 정보는 다음에 다시 액티비티가 실행이 될때까지 이 정보가 저장이 된다고 합니다. Do it 안드로이드 앱 프로그래밍 책에 이 내용이 씌여져 있었으면 어떻게 간단하게 해결이 되었을 것인데, 그게 아니어서 많이 헤메었다는 생각이 듭니다.

+ Recent posts

티스토리 툴바