[안드로이드] 액티비티 생명주기(Activity Lifecycle)

SHY(code poet)·2024년 3월 28일
0

1. 액티비티 생명주기

목적: 수명 주기 내 콜백 함수를 통한 안정적 사용

안드로이드는 액티비티의 상태가 변화할 때마다, 특정 동작을 수행할 수 있도록 콜백 메소드를 제공한다.

안드로이드 개발자 가이드에는 다음과 같은 언급이 있다.

각 콜백을 사용하면 지정된 상태 변경에 적합한 특정 작업을 실행할 수 있습니다. 적시에 알맞은 작업을 하고 적절하게 전환을 처리하면 앱이 더욱 안정적으로 기능할 수 있습니다. 예를 들어 수명 주기 콜백을 잘 구현하면 앱에서 다음을 피하는 데 도움이 될 수 있습니다.

  • 사용자가 앱을 사용하는 도중에 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 문제
  • 사용자가 앱을 활발하게 사용하지 않는 경우 귀중한 시스템 리소스가 소비되는 문제
  • 사용자가 앱에서 나갔다가 나중에 돌아왔을 때 사용자의 진행 상태가 저장되지 않는 문제
  • 화면이 가로 방향과 세로 방향 간에 회전할 경우, 비정상 종료되거나 사용자의 진행 상태가 저장되지 않는 문제

2. 수명 주기 콜백

총 7가지의 콜백 메소드가 지정되어 있고, 사용자가 어떤 행위를 하느냐에 따라, 다른 메소드가 호출된다. 아래는 일반적인 호출 순서에 따라 콜백 메소드를 정리해놓은 것이다.

① onCreate()

액티비티가 생성될 때, 가장 먼저 호출된다. 전체 생명주기 동안 딱 한번만 동작하며 값 초기화나 시작로직을 실행한다.

  • 이 콜백메소드는 꼭 오버라이딩하여 구현해야 한다.

※ setContentView의 경우, xml 파일을 세팅해주는데, onCreate()의 종속적인 메소드이다.

② onstart()

액티비티의 화면이 눈에 보이게 되는 단계(VIsibility)
(This call makes the activity visible to the user // 공식문서)

  • 이 메서드에서 UI를 유지하는 코드가 초기화된다.
  • 매우 빠르게 완료되어, 다음 단계인 onResume()을 호출한다.

③ onResume()

앱에서 활동이 포그라운드(foreground)로 전환되는 단계.

  • 이 상태에 진입하면 본격적으로, 포그라운드에 액티비티가 표시되고, 앱이 사용자와 상호작용을 할 수 있는 상태가 된다.

📜아래 onPause()를 읽고 오시오!

onResume()의 interrupt 처리
: onResume()를 구현하여, onPause 중에 해제되는 구성요소를 다시 초기화하고, 액티비티가 재개될 때마다 필요한 초기화 작업을 수행하게 할 수 있다.

④ onPause()

onResume() 도중 interrupt 발생 시 즉, 다른 액티비티가 보여져 해당 액티비티가 더 이상 foreground에 있지 않게 되었을 때 호출된다.

  • interrupt 종류
    a. 앱 실행도중 방해 이벤트 발생(전화가 오는 케이스)
    b. 멀티 윈도우 상 다른 앱에 포커스를 두는 경우

  • 배터리 수명에 영향을 미치는 시스템 리소스, 하드웨어 센서 할당해제

  • 다시 액티비티가 재개되면 메모리 상 남아있는 Activity Instance를 다시 불러와 onResume()메소드를 호출한다.

    ⚠️주의⚠️
    아주 잠깐 호출되는 것이기 때문에, UI관련 작업 중지, 네트워크 호출, db트랜잭션 등 중요하고 긴 작업은 실행하지 않는 것이 좋다.
    👉 onStop()에서 구현할 것

⑤ onStop

액티비티가 더 이상 사용자에게 보여지지 않을 때 호출

  • 이 메소드에서는 cpu를 비교적 많이 잡아먹는 리소스를 해제하거나 조정해야 한다.
    EX) 애니메이션 중지 / GPS 위치 인식 정확도 '세밀한 위치'에서 '대략적인 위치'로 전환

⑥ onRestart()

액티비티가 onStop()되어 멈췄가가, 다시 시작될 때 호출

⑦ onDestroy()

액티비티가 완전히 소멸될 때 호출

  • finish()가 호출될 때
  • 사용자가 앱을 종료할 때
  • 화면 구성이 변경되어(기기 회전 등) 일시적으로 액티비티를 소멸시킬 때
profile
그것을 이해하고자 하기 때문에 결국은 그것을 견디어내게 된다.

0개의 댓글