Activity Lifecycle

g_one212·2021년 10월 24일
0

안드로이드 생명주기

가장 기초적인 내용이지만, 가장 잘 까먹는 생명주기!
이번참에 복습하고 정리할겸 포스팅합니다.


위 그림은 액티비티 생명주기를 표현한 그림이다.
안드로이드 개발자라면 한번쯤 본 그림이라고 생각한다!

onCreate()

시스템이 먼저 액티비티를 생성할 때 실행되는 콜백함수 액티비티가 생성되면, 생성됨(Created)상태가 된다. onCreate() 메서드에서 액티비티 전체 수명주기 동안 한 번만 발생해야 하는 로직을 설정한다!(ex 바인딩, 뷰모델 연결 등) onCreate() 메서드가 실행을 완료하면, 시작됨(Started)상태가 되고, 연달아 onStart()와 onResume() 메서드를 호출합니다.

onStart()

액티비티가 시작됨(Started) 상태에 들어가면, onStart() 메서드를 호출(콜백)하면서 액티비티가 사용자에게 표시되고, 앱은 액티비티를 포그라운드에 보내 상호작용할 수 있도록 준비해준다!
onStart() 메서드는 매우 빠르게 완료되고, 시작됨(Started)상태에 머무르지 않는다. onStart()가 완료되면, 재개됨(Resumed) 상태에 들어가고, 시스템이 onResume() 메서드를 호출한다.

onResume

액티비티가 재개됨(Resumed)상태에 들어가면 포그라운드에 표시되고 onResume() 메서드(콜백)를 호출한다! 재개됨(Resumed)상태는 앱이 사용자와 상호작용한다. 어떤 이벤트(Alert, startActivity, 전화가오는 경우, 화면이 꺼지는 경우 등)가 발생하여 앱에서 포커스가 떠날 때까지 앱은 재개됨(Resumed)상태에 머무른다. 방해되는 이벤트가 발생하면 액티비티는 일시중지됨(Paused)상태에 들어가고, onPause() 메서드(콜백)를 호출한다. 액티비티가 일시중지됨(Paused) 상태에서 재개됨(Resumed) 상태로 돌아오면 onResume() 메서드를 다시 한번 호출한다. onPause()중 해제한 구성 요소를 초기화하기 위해서 onResume()을 구현하여 액티비티가 재개됨(Resumed)상태로 전환될 때 필요한 다른 초기화 작업도 수행해야한다.

하지만, 멀티윈도우 모드에서는 액티비티가 일시중지됨(Paused) 상태에 있더라도 완전히 보일 수 있다. ex) 사용자가 멀티 윈도우 모드에 있을 때 현재 액티비티를 포함하지 않는 다른 창을 탭할경우

수명주기 이벤트(콜백)에서 리소스를 초기화, 해제 해야한다.
onStart()에서 초기화 할 시, onStop()에서 해제
onResume()에서 초기화 할 시, onPause()에서 해제

onPause()

시스템은 사용자가 액티비티를 떠나는 것을 나타내는 첫 번째 신호로 onPause()메서드(콜백)를 호출한다! 액티비티가 포그라운드에 있지 않게 되었다는것을 나타낸다(멀티 윈도우 모드에 있을 경우에는 표시 될 수도 있음). onPause()는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족할 수 있다. 그래서 onPause()를 사용해서 사용자의 데이터를 저장하거나, 네트워크 호출 및 DB트랜잭션을 실행서는 안된다. 이러한 작업은 onPause() 메서드 실행이 끝나기 전에 완료되지 못할 수도 있다. 부하가 큰 종료의 작업은 onStop()상태일 때 실행해야 한다. 액티비티가 다시 시작되면 시스템은 다시 한번 onResume()메서드(콜백)을 호출한다.
액티비티가 완전히 보이지 않게 되면, 시스템은 onStop()메서드(콜백)을 호출한다.

onStop()

액티비티가 사용자에게 더 이상 표시되지 않으면 중단됨(Stopped)상태에 들어가고, onStop()메서드(콜백)을 호출한다. ex) 새로 시작된 액티비티가 화면 전체를 차지할 때 onStop() 메서드에서는 앱이 사용자에게 보이지 않는 동안 앱은 필요 하지 않은 리소스를 해제하거나, 조정해야한다.
ex) 애니메이션 일시중지
또한 onStop()메서드를 사용하여 CPU를 비교적 많이 소모하는 종료 작업을 실행해야한다. ex) DB에 정보 저장
액티비티는 중단됨(Stopped)상태에서 다시 시작되어 사용자와 상호작영하거나, 실행을 종료하고 사라진다. 액티비티가 다시 시작되면 시스템은 onRestart()메서드(콜백)을 호출한다. 액티비티가 실행을 종료하면 onDestroy()메서드(콜백)을 호출한다.

onRestart()

액티비티가 중단됨(Stopped)상태에서 다시 시작되기 전에 호출되는 메서드(콜백)이다. 이후에 onResume()메서드(콜백)가 호출된다.

onDestroy()

액티비티가 소멸되기 전에 호출된다. 시스템은 다음중 하나에 해당할 때 onDestroy()메서드(콜백)을 호출한다.

  1. 사용자가 액티비티를 완전히 닫거나, 액티비티에서 finish()가 호출되어 액티비티가 종료되는 경우

  2. 구성 변경(기기 회전, 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 액티비티를 소멸시키는 경우

액티비티가 종료되는 경우 onDestroy()메서드(콜백)는 액티비티가 수신하는 마지막 수명주기이다. 구성 변경으로 인해 onDestroy()메서드(콜백)가 호출되는 경우 시스템이 즉시 새 액티비티 인스턴스를 생성한 후, 그 인스턴스에 관하여 onCreate()메서드를 호출한다. onDestroy()메서드(콜백)는 onStop()에서 아직 해제되지 않은 모든 리소스를 해제해야한다.

profile
이해는 뇌를 흥분시킨다

0개의 댓글