안녕하세요.
문제는 어플을 내려놓고 다른 작업을 하던 중 다시 앱을 켰을 때
메모리가 죽어서 읽어왔던 데이터들이 초기화가 되어 있는 모습을 발견했을 때 발생하였습니다.
싱글턴으로 불러와서 사용하였는데, 싱글턴마저 죽어버리니 대책이 없더군요;
그러던 중 Bundle로 저장되는 InstanceState를 발견하였습니다.
그래서 데이터를 불러와 Bundle로 저장하고 onSaveInstanceState() 에서
super.onSaveInstanceState(GlobalData.getInstance().baseData());
하였으나 저장되지 않더군요.
여기서 질문! A 액티비티에서 B 액티비티로 넘어갈 때 onSaveInstanceState()가 호출됩니다.
이 때 저장된 번들은 B 액티비티에서 onCreate를 통해 들어오는 savedInstanceState에 들어오지 않던데,
원래 액티비티가 틀리면 번들을 따로 쓰나요?
뭐 여튼 전 불러온 데이터가 커서 그런가? 하고
다른 방법으로 테스트를 해봤습니다.
onSaveInstanceState(Bundle state)에서
state.putString("field", "none");
super.onSaveInstanceState(state);
역시나 B 액티비티의 onCreate에 번들이 안들어오더군요. null입니다.
하여 위의 질문의 요지를 의심하며 어플을 띄운 후 홈버튼을 눌러봤습니다.
onSaveInstanceState에 잘 들어가더군요. 그리고 field키의 none 문자열을 저장했습니다.
그리고 다시 어플을 띄운 후 다시 홈버튼을 누르고 들어간 onSaveInstanceState에서
인자로 넘어온 state가 비어있더군요.(번들 객체는 만들어진 상태이지만 저장했던 문자열도 없이 비어있습니다.)
원래 onSaveInstanceState가 호출되면 매번 새로운 번들 객체가 넘어오는 건가요?