본문 바로가기
안드로이드/개념

[android] Activity Lifecycle

by 코드 이야기 2021. 6. 8.
728x90

 

 

 

https://developer.android.com/guide/components/activities/activity-lifecycle

 

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

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

developer.android.com

 

 

Acvitity 생명 주기란?

  • 액티비티의 생성부터 소멸까지의 주기이다.
  • 안드로이드 응용프로그램은 화면이 작아 동시에 여러 개의 액티비티가 나올 수 없어서 앞에 나오는 화면 하나만 활성화된 상태이고 나머지는 모두 비활성화된 상태로 남게 된다. 그에 따른 액티비티의 여러 상태(실행, 일시 정지, 중지 등)를 나타내는 것이다.

 

 

생명 주기 그래프

 

 

수명 주기에 따른 콜백 메서드

  • onCreat() : Activity를 생성할 때 실행되는 것으로, 필수적으로 구현해야 한다. Activity의 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행한다. 예를 들어  Activity와 ViewModel과 연결하거나, 데이터를 목록에 바인딩하는 등의 일들을 수행해준다.
    Activity는 Creat 상태에 머무르지 않는다. onCreate() 메서드가 실행을 완료하면 시작됨 상태가 되고, 시스템이 연달아 onStart()와 onResume() 메서드를 호출한다.

  • onStart() : onStart()가 호출되면 활동이 사용자에게 표시되고, 앱은 활동을 포그라운드에 보내 상호작용할 수 있도록 준비합니다. 예를 들어 이 메서드에서 앱이 UI를 관리하는 코드를 초기화합니다.
    onCreat()와 마찬가지로 활동은 시작됨 상태에 머무르지 않고, 이 콜백이 완료되면 활동 재개 상태에 들어가고, 시스템이 onResume() 메서드를 호출한다.

  • onRestart() : Activity가 다시 시작되기 직전에 호출된다.

  • onResume() : 이 상태에 들어갔을 때 앱이 사용자와 상호작용을 한다. 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태를 유지한다. 예를 들어 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트가 이에 해당합니다.
    이와 같은 상황이 발생한다면 시스템이 onPause() 콜백을 호출한다.
    활동이 일시 중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출합니다. 

  • onPause() : 다른 앱으로의 이동, 다른 Activity로의 이동,  멀티 윈도우 모드를 실행, 반투명 활동 실행 등의 이유로 Activity가 foregrount에 있지 않게 되었을 때 호출된다. 
    사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미칠 수 있는 모든 리소스를 해제할 수도 있다. 그러나 일시 중지된 활동은 멀티 윈도우 모드 등에서 여전히 보이는 상태일 수 있다. 그러므로 멀티 윈도우 모드를 더욱 잘 지원하기 위해 UI 관련 리소스와 작업을 완전히 해제하거나 조정할 때는 onPause() 대신 onStop()을 사용하는 것이 좋습니다.
    활동이 완전히 보이지 않게 되면 시스템은 onStop()을 호출한다.

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

  • onDestroy() : 사용자가 Activity를 종료하거나 Activity에서 finish()를 호출하는 등의 행위가 발생하면 Activity가 소멸하기 전에 onDestroy()가 호출된다. 이와 같은 두 가지 시나리오는 isFinishing() 메서드로 구분할 수 있다.

 

 

Activity 상태 변화에 따른 이벤트 메소드 호출 순서 

  • 처음 실행 : onCreate() → onStart() → onResume() 
  • 종료 : onPause() → onStop() → onDestroy() 
  • Hide상태 : onPause() → onStop()
    (홈, 다른 액티비티 실행, 다른 액티비티 실행 등의 상황)
  • 재실행 : onRestart() → onStart() → onResume()
    (홈, 다른 액티비티 실행, 다른 액티비티 실행 등의 상황에서 현재 액티비티로 돌아왔을 때 등)
  • 화면 회전 : onPause() → onStop() → onDestroy() → onCreate() → onStart() → onResume() 
  • 팝업창 띄움 : onPause() 
  • 팝업창 종료 : onResume()

Activity의 상태 변화에 따른 콜백 메서드의 호출 순서는 로그를 찍어보면 가장 쉽게 알 수 있다.

 

 

 

Activity LifeCycle을 사용하며 주의해야할 점

  • 우선순위가 더 높은 앱이 메모리를 필요로 하는 경우 앱은 언제든지 종료될 수 있다.
    • 따라서 onStop(), onDestroy()는 반드시 실행된다는 보장이 없다.
  • 시스템에 의해 Activity가 제거되는 경우도 있다.
    • 한 앱에서 너무 많은 메모리를 사용하고 있다면 앱 강제 종료를 막기 위해 시스템에서 백그라운드의 Activity를 제거할 수 있다.

 

 

 

728x90

'안드로이드 > 개념' 카테고리의 다른 글

Intent 알아보기  (0) 2023.06.15

댓글