Developing Myself Everyday
article thumbnail

안드로이드 앱을 개발하면서 모든 수명 주기 메서드를 구현할 필요는 없다. 하지만 각각의 수명 주기 메서드를 이해하고, 사용자가 예상한 대로 앱이 동작하도록 필요한 수명 주기 메서드를 구현하는 것이 중요하다.


액티비티 생명주기

 

 

 

onCreate()

onCreate()는 시스템이 활동을 생성할 때 가장 먼저 실행되는 것으로, 액티비티에서는 필수적으로 구현해야 한다. 활동이 생성되면 생성됨 상태가 된다. onCreate()에서는 활동의 전체 수명 주기 동안 한 번만 발생하여 하는 기본 애플리케이션 시작 로직을 작성하면 된다. 예를 들면 데이터를 목록에 바인딩하고, 활동을 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스화 하는 등을 작성하면 된다.

 

활동은 생성됨 상태에 머무르지 않고 onCreate() 메서드가 실행을 완료하면 시작됨 상태가 되고 onStart()와 onResume() 메서드를 호출한다.

 

 

 

 onStart()

활동이 시작됨 상태에 들어가면 시스템은 이 콜백을 호출한다. onStart()가 호출되면 활동이 사용자에게 표시되고, 앱은 사용자와의 상호작용을 위한 준비를 한다.

 

onStart() 메서드는 매우 빠르게 완료되고, 생성됨 상태와 마찬가지로 활동은 시작됨 상태에 머무르지 않는다. 이 콜백이 완료되면 활동이 재개됨 상태에 들어가고, 시스템이 onResume() 메서드를 호출한다.

 

 

 

 onResume()

활동이 재개됨 상태에 들어가면 화면에 표시되고 시스템이 onResume() 콜백을 호출한다. 이 상태에 들어가면 앱이 사용자와 상호작용을 시작한다. 어떤 이벤트가 발생해 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무른다. 예를 들어 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트가 이에 해당한다.

 

만약 방해되는 이벤트가 발생하면 활동은 일시중지됨 상태에 들어가고 시스템이 onPause() 콜백을 호출한다.

 

활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출한다. 따라서 onResume()을 구현해 onPause() 중에 해제하는 구성요소를 초기화하고, 활동이 재개됨 상태 전환될 때마다 필요한 다른 초기화 작업도 수행하면 된다.

 

 

 

 onPause()

시스템은 사용자가 활동을 떠나면 onPause()를 호출한다. onPause() 메서드를 사용해 Activity가 일시중지됨 상태일 때 계속 실행되어서는 안 되지만 잠시 후 다시 시작할 작업을 일시중지하거나 조정한다.

 

onPause() 메서드를 사용해 시스템 리소스 또는 사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미칠 수 있는 모든 리소스를 해제할 수도 있다. 다만 일시중지된 활동은 멀티 윈도우 모드에서 여전히 완전히 보이는 상태일 수 있다. 그러므로 UI 관련된 리소스와 작업을 완전히 해제하거나 조정할 때는 onPause() 대신 onStop()을 사용하는 것이 좋다.

 

 

 

 onStop()

활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고, onStop()이 호출된다. 이는 새로 시작된 활동이 화면 전체를 차지할 경우에 적용된다. 시스템은 활동의 실행이 완료되어 종료될 시점에 onStop()을 호출할 수도 있다.

 

onStop() 메서드에서는 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 한다. 앱은 애니메이션을 일시중지하거나, 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환할 수 있다.

 

또한 onStop()를 사용해 CPU를 비교적 많이 소모하는 종료 작업을 실행하야 한다. 예를 들면 데이터베이스에 저장할 적절한 시기를 찾지 못했다면 onStop() 상태일 때 저장할 수 있다.

 

활동은 중단됨 상태에서 다시 시작되어 사용자와 상호작용하거나, 실행을 종료하고 사라진다. 활동이 다시 시작되면 시스템은 onRestart()를 호출한다. Activity가 실행을 종료하면 시스템은 onDestroy()를 호출한다. 

 

 

 

 onDestroy()

onDestroy()는 활동이 소멸되기 전에 호출된다. 시스템은 다음 중 하나에 해당할 때 이 콜백을 호출한다.

  1. (사용자가 활동을 완전히 닫거나 활동에서 finish()가 호출되어) 활동이 종료되는 경우
  2. 구성 변경(예: 기기 회전 또는 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우

활동이 종료되는 경우 onDestroy()는 활동이 수신하는 마지막 수명 주기 콜백이 된다. 구성 변경으로 인해 onDestroy()가 호출되는 경우 시스템이 즉시 새 활동 인스턴스를 생성한 다음, 새로운 구성에서 그 새로운 인스턴스에 관해 onCreate()를 호출한다.

 

 

Reference

https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko 

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!