본문 바로가기

Android

[Why] 영구적인 data를 저장할 때, onPause()가 안전하다.


















- onPause() 콜백 메서드는 액티비티가 background로 가려고하는 상태이다.

- 실행중이던 계산이나 애니메이션을 꼭 중단하도록 구현해야 한다.

- onPause() 콜백 메서드가 return 되어야 새 액티비티가 활성화될 수 있으므로,

Android SDK는 foreground 액티비티를 만들기 전에 이 콜백이 return하는 것을 기다린다.

- onPause()가 호출된 이후를 Killable 상태라 하는데, 이는 시스템이 언제든지 액티비티를 강제 종료할 수 있다는 뜻이다.

강제 종료된 프로그램은 onStop()과 onDestroy()가 호출되지 않으므로,

onPause()가 호출된다고 보장되는 최후의 메서드인 것이고, 프로세스가 완전히 되찾아진다.

그래서 영구적인 data를 파일에 저장할 수 있는 마지막 기회이다.

- View 객체만 가졌다면, 저장할 필요가 없다.

액티비티가 자동으로 View를 저장하고 있기 때문이다.






[Why] onSaveInstanceState(Bundle) or onRestoreInstanceState(Bundle) 메서드는

일시적인 data를 저장하기에 적합하다.


- 안드로이드 시스템에의해 destroy된 후에, 액티비티 객체를 이전과 똑같이 recreate하고 싶을 때 필요한 메서드이다.

memory에 머무르기에는 back stack에서 너무 멀리 떨어져있기 때문이다.

- 시스템은 액티비티를 중지시키기 전에 onSaveInstanceState()를 호출한다.

- onSaveInstanceState(Bundle)는 lifecycle 콜백이 아니기때문에, 액티비티 lifecycle의 어떤 상황에서라도 호출되지 않을 것이다.

그러므로 View 객체가 아닌, 저장하거나 복구시킬 data는 onPause()와 onResume()에 두어야 한다.

즉, View 객체만 가졌다면 저장할 필요가 없다는 것을 알 수 있다. 


'Android' 카테고리의 다른 글

repeat  (0) 2016.03.02
같은 프로젝트로 두 앱 동시에 띄우기  (0) 2015.09.30
Windows에서 git이랑 연결하기  (0) 2015.07.13
[Thread/Service/Broadcast] 5초마다 Toast 띄우기  (0) 2015.07.02
Fragment를 호스팅하는 Activity  (0) 2015.06.30