Android: Activity

yxnsx·2022년 6월 2일
0

Dev: Android

목록 보기
7/8
post-thumbnail

Activity

  • 사용자와 앱과 상호작용하기 위한 진입점
  • 앱이 UI를 그리는 창을 제공
  • 한 앱이 다른 앱을 호출할 경우, 앱 전체를 호출하는 것이 아닌 Activity를 호출
  • main() 메서드를 사용하여 앱을 실행하는 프로그래밍 패러다임과는 달리 Activity 수명주기의 특정 단계에 해당하는 특정 콜백 메서드를 호출하여 Activity를 시작함
  • 매니페스트 파일에 <activity>로 선언

Activity 수명주기

onCreate() - 생성됨

  • 시스템이 Activity를 생성할 때 실행됨
  • Activity의 전체 수명주기 동안 한 번만 발생해야 하는 시작 로직을 수행하고 필수 구성요소를 초기화해야 함 (setContentView() 호출 및 레이아웃 정의 등)
  • lifecycle-aware 컴포넌트에게 ON_CREATE 이벤트 전달
  • 완료 후 시작됨 상태로 전환 및 onStart() 호출

onStart() - 시작됨

  • Activity가 사용자에게 표시됨
  • Activity가 Foreground에서 사용자와 상호작용하기 위한 최종 준비 작업을 설정해야 함
  • lifecycle-aware 컴포넌트에게 ON_START 이벤트 전달
  • 완료 후 재개됨 상태로 전환 및 onResume() 호출

onResume() - 재개됨

  • Activity가 Foreground에 보여지며 사용자와 상호작용할 수 있는 상태
  • 포커스를 잃기 전까지 onResume()에 머묾
  • 앱 핵심 기능의 대부분을 설정해야 함
  • lifecycle-aware 컴포넌트에게 ON_RESUME 이벤트 전달
  • 포커스를 잃게끔 하는 이벤트 발생시, 일시중지됨 상태로 전환 및 onPause() 호출
  • 일시중지됨 상태에서 재개됨 상태로 전환시 onResume()이 다시 호출되므로, onPause()에서 해제한 리소스를 다시 초기화해주어야 함

onPause() - 일시중지됨

  • Activity가 포커스를 잃고 '일시중지됨' 상태로 전환될 때 호출됨
  • Activity가 부분적으로 표시되지만, 사용자가 활동을 떠나고 있으며 Activity가 조만간 '중지됨' 또는 다시 '시작됨' 상태로 전환될 것을 나타냄
  • lifecycle-aware 컴포넌트에게 ON_PAUSE 이벤트 전달
  • onResume()에서 초기화한 리소스의 경우, onPause()에서 해제
  • 사용자가 다시 Activity로 돌아갈 경우 onResume(), Activity가 완전히 보이지 않게 될 경우 onStop() 호출

onStop() - 중단됨

  • Activity가 더 이상 사용자에게 보이지 않아 '중단됨' 상태로 전환될 때 호출
  • lifecycle-aware 컴포넌트에게 ON_STOP 이벤트 전달
  • onStart()에서 초기화한 리소스의 경우, onStop()에서 해제
  • 사용자가 다시 Activity로 돌아갈 경우 onRestart(), Activity의 실행을 종료할 경우 onDestroy() 호출

onDestroy() - 소멸됨
  • Activity가 소멸되기 전 호출
  • Activity의 모든 리소스를 해제해야 함
  • 메모리 부족, 화면 회전 등 시스템의 제약조건으로 인해 Activity가 소멸된 경우, 해당 Activity의 인스턴스를 재생성하고 onCreate()를 호출함
  • lifecycle-aware 컴포넌트에게 ON_DESTROY 이벤트 전달

Activity 상태 저장

  • 사용자가 앱 사용 중 화면을 회전하거나 multi-window로 전환할 경우, Activity가 소멸되어 새로 생성되지만 사용자는 UI 상태가 동일할 것으로 기대함
  • ViewModelonSaveInstanceState() 등을 이용하면 시스템의 제약조건으로 인해 Activity가 소멸될 경우를 대비하고 사용자에게 동일한 UI 상태를 제공할 수 있음

onSaveInstanceState()

  • 시스템이 Activity 또는 Fragment를 소멸시켰을 경우, 이를 재생성하고 UI 상태를 재로드하기 위한 데이터를 저장하는 callback
  • Saved instance state bundles는 구성 변경이나 시스템의 프로세스 중단에도 유지됨
  • 디스크에 데이터를 직렬화하여 저장하기 때문에 기기 성능(저장 용량 및 속도)에 영향을 받고 ViewModel에 비해 속도가 느림
  • 작업이 메인 스레드에서 진행되므로 직렬화된 데이터가 복잡할 경우, 프레임 드롭 또는 시각적 끊김 현상이 발생할 수 있음


📝 References

0개의 댓글