선생님, 개발을 잘하고 싶어요.

[Lifecycle] Activity Lifecycle 각 callback 마다 무슨 작업을 하는 것이 좋을까? 본문

개발/android 개발

[Lifecycle] Activity Lifecycle 각 callback 마다 무슨 작업을 하는 것이 좋을까?

알고싶은 승민 2021. 4. 4. 11:32

뭔가 라이프사이클 글이면 있어야 할 것 같아서 추가한 이미지.

 

수명 주기 패러다임

Activity가 새로운 상태에 들어가면 시스템에서 호출하는 콜백

시스템 콜백

내부에서 일어나는 일, 무엇을 구현해야 하는 지

onCreate - 생성됨 상태

내부에서 일어나는 일

  • 시스템이 Activity를 생성할 때 실행
  • 생성됨 상태시작됨 상태

해야 할 일

  • 데이터 바인딩
  • 뷰 바인딩
  • Activity와 ViewModel 연결
  • 클래스 범위 변수 인스턴스화
  • 이전 Activity 저장 상태가 포함된 savedInstanceState 세팅

onStart - 시작됨 상태

내부에서 일어나는 일

  • Activity가 사용자에게 보임
  • 앱은 Activity를 foreground로 보내 상호작용 준비
  • 시작됨 상태재개됨 상태
  • 매우 빠르게 완료

해야 할 일

  • 앱이 UI를 관리하는 코드 초기화

onResume - 재개됨 상태

내부에서 일어나는 일

  • foreground에 표시된 후
  • 앱이 사용자와 상호작용 가능
  • 앱에서 포커스가 떠날 때 까지 이 상태에 머뭄
  • 재개됨 상태일시중지됨 상태

해야 할 일

  • foreground에 보이는 동안 실행해야 하는 모든 기능 활성화 (ex. 카메라 미리보기)

onPause - 일시중지됨 상태

내부에서 일어나는 일

  • Activity가 foreground에 있지 않게 됨
  • Activity 다시 시작
    • 일시중지됨 상태재개됨 상태 (onResume)
  • Activity가 완전히 보이지 않게 됨
    • 일시중지됨 상태중단됨 상태 (onStop)

해야 할 일

  • 계속 실행되면 안되는 작업을 일시중지하거나 조정
  • 사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미치는 모든 리소스 해제

주의 할 것

  • 사용자 데이터를 저장, 네트워크 호출, 데이터베이스 트랜잭션 실행하지 않기
    • 메서드 실행이 끝나기 전에 완료되지 못할 수도 있다.
    • 부하가 큰 종료 작업은 onStop()에서 실행

onStop - 중단됨 상태

내부에서 일어나는 일

  • 사용자에게 더 이상 표시되지 않음
    • 새로 시작된 Activity가 화면 전체를 차지할 경우
  • CPU를 onPause보다 비교적 많이 사용
  • Activity가 다시 시작 되는 경우
    • 중단됨 상태 → onRestart
  • Activity 실행 종료하는 경우
    • 중단됨 상태 → onDestroy

해야 할 일

  • 화면에 보이지 않을 때 실행할 필요가 없는 기능 정지
  • 사용자에게 보이지 않는 동안 필요하지 않은 리소스 해제, 조정
    • 애니메이션 일시중지
    • 세밀한 위치 조정 → 대략적 위치 업데이트

onDestroy - 소멸됨 상태

내부에서 일어나는 일

  • Activity가 소멸되기 전 호출
    • 종료되는 경우 (isFinishing == true)
    • 구성 변경으로 인해 일시적 소멸

해야 할 일

  • 아직 해제되지 않은 모든 리소스 해제

권장 사항

  • 구성 변경으로 인해 다시 생성될 경우 별도로 데이터를 관리하는 것은 번거롭다.
    • ViewModel을 사용할 것
      • onCleared에서 정말 Activity의 소멸 직전 데이터 정리가 가능하다.

시스템에 의해 종료되는 프로세스

사용자의 뒤로가기 버튼, finish() 호출

  → 의도된 종료 동작, 인스턴스 유지 필요 없다.

 

시스템 제약 (구성 변경, 메모리 부족)

  → 프로그래머 의도된 종료 아님. 인스턴스는 파괴됨. 시스템에서 새로운 인스턴스 생성함.

 

시스템이 이전 상태를 복원하기 위해 사용하는 저장된 데이터: instanceState

  Bundle객체로 저장된 키-값 컬렉션

  메인 스레드에서 직렬화, 시스템 프로세스 메모리 사용

    → 소량의 데이터를 보존하는 데 적합

Activity간 전환

A → B로 이동

A onPause()

B onCreate()

B onStart()

B onResume()

A onStop()

 

첫 Activity는 두번째 Activity가 생성되기 전에 완전히 중단되지 않는다.

 

참고 자료

안드로이드 활동의 이해 문서: developer.android.com/guide/components/activities/activity-lifecycle

Comments