만약 사용자가 다른 앱을 실행하려고 하거나 다른 앱으로부터 알림(카톡)이 올 때 안드로이드는 어떻게 처리될까에 대해 알 수 있는 개념이다.
사용자가 앱을 전환하거나 나갔다가 다시 들어오는 행위를 할 때 Activity lifecycle 안에서 변화한다. 만약 이렇지 않을 경우 비정상적인 종료가 일어나거나 효율적이지 못한 메모리가 쌓일 것이다. 앞으로는 사용하지 않을 액티비티를 계속하여 켜두게 되면 그 메모리는 비효율적일 것이다.
우리가 다른 앱을 켜뒀다가 다시 돌아갈 때 이전 상태를 보여주는 것은 이 activity lifecycle에 따라서 그렇다.
이 함수가 완료된다고 해도 activity는 paused 상태에 머물게 된다. 그러다가 아예 activity가 없어지면 onStop() 을 호출하게 된다.
5. onStop()
activity가 더이상 사용자에게 표시되지 않으면 Stopped 상태가 되며 onStop()이 실행된다. 새로운 activity가 화면 전체를 가릴 때 기존 activity가 이 상태에 들어가는 것이다.
이때는 앞서 onPause()에서 하지 말아야할 것들을 한다. 예를 들어 사용자에게 보이지 않는 상태이므로 애니메이션 중지나 위치 업데이트 등의 리소스를 해제하거나 조정한다.
onStop()에서는 CPU를 비교적 많이 소모하는 종료 작업을 실행해야 한다. 예를 들어 데이터베이스에 데이터를 저장할 때이다.
다시 사용자와 상호작용을 할 때면 onRestart()를 호출하고, activity가 종료되면 onDestroy()를 호출한다.
6. onDestroy()
onDestroy()는 activity 소멸 전에 호출된다. 예를 들어 아예 activity가 종료되거나 finish()가 호출되거나, 시스템에서 일시적으로 activity가 소멸되는 경우에 호출된다.
만약 구성 변경(configuration change)으로 인해 호출되면 시스템이 즉시 새 activity instance를 생성한 다음, 새로운 구성에서 새 instance에 관해 onCreate()를 호출한다. (ex 화면전환)
안드로이드 공홈에서는 onDestroy()를 설명하면서 ViewModel을 언급한다. 화면 전환을 하게 되면 onDestroy()되면서 다시 화면이 만들어지고 새로운 instance가 onCreate()된다. 이때 이전 데이터 값을 어떻게 새 activity에게 넘겨주는가가 문제인데, ViewModel이 해결법이다.
ViewModel로 파괴될 activity의 데이터가 유지되는데 이때 (onCreate()의 parameter로 볼 수 있는) Bundle 클래스에 담긴 saveInstanceState로 전달한다는 것이다.
ViewModel의 lifecycle은 activity와 달라서 데이터가 유지되는데, 만약 activity가 완전히 소멸되면(더이상 activity가 생성되지 않으면 ) onCleared()를 호출한다.