안드로이드 액티비티 생명주기

이번에 Django rest api 서버 포지션으로 안드로이드와 협업하는 경험이 있었다.

안드로이드 어플을 개발함에 있어서 안드로이드 컴포넌트 중 하나인 액티비티 생명주기에 대해 깊은 이해가 필요한 것을 보고 정리하게 되었다.

액티비티 생명주기

수명주기 콜백 메서드

onCreate()

  • 액티비티가 생성될 때 호출되면 사용자 인터페이스 초기화에 사용됨.
  • 필수적으로 구현해야 함.
  • 데이터를 목록에 바인딩하고, 액티비티를 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스화할 수 있음.
  • 이후 시스템이 연달아 onStart()와 onResume() 메서드를 호출

onStart()

  • 액티비티가 사용자에게 보여지기 바로 직전에 호출됨.
  • 앱은 액티비티를 포그라운드에 보내 상호작용할 수 있도록 준비
  • 앱이 UI를 관리하는 코드를 초기화
  • onStart() 메서드는 매우 빠르게 완료되고, 이후 onResume() 메서드를 호출함

onResume()

  • 액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
  • 전화, 다른 액티비티으로 이동, 기기 화면이 꺼지는 등의 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 onResume() 상태에 머무름.
  • 방해되는 이벤트 발생시 시스템이 onPause() 콜백을 호출
  • 액티비티가 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출함. 따라서 onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 액티비티가 재개될 때마다 필요한 다른 초기화 작업도 수행해야 함.

onPause()

  • 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등 처리할 때 쓰이는 메소드
  • 사용자가 액티비티에서 떠나는 첫 신호로 시스템은 onPause() 메서드를 호출. 액티비티가 포그라운드에 있지 않다는 것을 나타냄.
  • 구성요소가 포그라운드에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있음.
  • opPause()는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족할 수 있음. 따라서 onPause()를 사용하여 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행하면 안 됨. 부하가 큰 종료 작업은 onStop() 상태일 때 실행해야 함.

onStop()

  • 액티비티가 더 이상 사용자에게 보여지지 않을 때 호출됨.
  • 새로 시작된 액티비티가 화면 전체를 차지할 경우에 적용.
  • 구성요소가 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있음.
  • 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 함.
  • 멀티 윈도우 모드를 더욱 잘 지원하기 위해 UI 관련 리소스와 작업을 완전히 해제하거나 조정할 때 onPause() 대신 onStop()을 사용하는 것이 좋음.
  • onStop()을 사용하여 CPU를 비교적 많이 사용하는 종료 작업을 실행해야 함. 예를 들어 정보를 데이터베이스에 저장할 적절한 시기를 찾지 못했다면 onStop() 상태일 때 저장할 수 있음.
  • 액티비티가 중단됨 상태에 들어가면 액티비티 객체는 메모리 안에 머무르게 된다.
  • 액티비티가 다시 시작되면 시스템은 onRestart()를 호출. 액티비티가 실행을 종료하면 시스템은 onDestroy()를 호출.

onRestart()

  • 액티비티가 멈추었다가 다시 시작되기 바로 전에 호출됨.

onDestroy()

  • 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.
  • 구성 변경으로 인해 onDestory()가 호출되는 경우 시스템이 즉시 새 활동 인스턴스를 생성한 다음, 새로운 구성에서 그 새로운 이스턴스에 관해 onCreate()를 호출

Reference

+ Recent posts