Android Activity Life Cycle

2023. 12. 26. 01:38·Android

[안드로이드 공식문서]

 

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

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

developer.android.com

🎉Acitivity Life Cycle

 사용자가 앱에서 하는 다양한 동작을 통해 앱의 Activity는 다양한 액티비티 생명주기의 상태 변화를 취합니다. 이번 장에선 사용자의 동작에 따른 액티비티와 프래그먼트의 생명 주기 패러다임에 대해 설명하고 각 생명주기에 따른 콜백 함수에 대해 다뤄보겠습니다. 

 

생명 주기를 쉽게 설명하자면 실제 화면에 표시되는 유무를 생각하면 편합니다. 먼저 최초로 앱을 실행하면 onCreate()가 호출되는데 이 때 초기화 관련한 작업을 하면 좋습니다. 그 다음엔 onStart()가 호출되는데 이 시점부터 사용자가 화면을 볼 수 있습니다. 그리고 onResume()이 호출되면 이 때 부터 사용자와 액티비티가 상호작용을 하고 각종 이벤트를 발생시킬 수 있습니다. 

 

액티비티가 포커스를 잃은 상태가 되면 onPause()가 호출됩니다. onStop()은 액티비티가 완전히 보이지 않을 때 호출되고 액티비티가 종료되거나 앱 프로세스 자체가 종료되면 onDestroy()가 호출됩니다. 또한 불투명한 새로운 액티비티가 최상단으로 올라와 기존 액티비티가 완전히 포커스를 잃고 보이지 않게 되면 onPause()에 이어 onStop() 까지 바로 호출됩니다. 

 

 

  • 활성 : 액티비티 화면이 출력되고 있으며 사용자가 이벤트를 발생시킬 수 있는 상태입니다. 처음 실행된 액티비티는 onCreate() -> onStart() -> onResume() 함수까지 호출됩니다. 

액티비티 활성화

  • 일시 정지 : 화면이 출력되고 있지만 사용자가 이벤트를 발생시킬 수 없는 상태로 onPause()까지 호출된 상태입니다. 일시 정지 상태의 액티비티가 다시 포커스를 얻어 사용자 이벤트를 처리할 수 있으면 onResume() 함수가 호출됩니다.

  • 비활성 : 액티비티가 종료되지 않고 화면에만 보이지 않는 상태입니다. 예를 들어 홈 버튼을 눌러 홈 화면으로 이동하면 onPause() -> onStop() 함수까지 호출되며 다시 액티비티를 활성화 시 onRestart() -> onStart() -> onResume() 함수가 호출됩니다.

  • 최종적으로 액티비티가 종료된다는 것은 onDestroy() 함수까지 호출되었단 의미입니다.

🎉onCreate()

액티비티를 활성화 할 때 가장 먼저 실행되는 메소드로 전체 생명 주기 동안 한 번만 발생해야 하는 기본 어플리케이션 로직을 실행합니다. 데이터를 바인딩하고 viewModel을 연결하는 등의 작업을 수행합니다.

 

이 메소드는 savedInstanceState 를 수신합니다. 예를 들어 화면을 회전했다고 가정했을 때 액티비티가 종료되었다 다시 생성되면 다음과 같은 생명주기를 걸칩니다.

 onCreate() -> onStart() -> onResume()으로 화면이 활성화된 상황에서
onPause() -> onStop() -> onSaveInstanceState() -> onDestroy() 까지 실행

 

이 때 액티비티의 모든 데이터는 사라지고 아래 과정을 거쳐 액티비티가 출력됩니다. 

onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()

 

액티비티를 종료할 때 저장했다 복원해야 할 데이터가 있다면 Bundle 이라는 객체에 담아 주면 됩니다. onCreate(), onSaveInstanceState(), onRestoreInstanceState() 함수는 Bundle 객체를 매개변수로 가지고 이 번들 객체를 통해 데이터를 저장하고 복원할 수 있습니다. 

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState) 
}

// 번들에 저장된 데이터 가져오기
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val data1 = savedInstanceState.getString("data1")
    val data2 = savedInstanceState.getString("data2")
}

// 번들에 데이터 저장
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
    super.onSaveInstanceState(outState, outPersistentState)
    outState.putString("data", "hello")
    outState.putString("data2", "hello2")
}

 

 

 

'Android' 카테고리의 다른 글

Android LayoutInflater  (2) 2023.12.26
Android Fragment Life Cycle  (1) 2023.12.26
Android Platform Architecture  (0) 2023.12.25
Android Main Thread  (2) 2023.12.23
Anroid REST API 연동기 [GET]  (3) 2023.12.22
'Android' 카테고리의 다른 글
  • Android LayoutInflater
  • Android Fragment Life Cycle
  • Android Platform Architecture
  • Android Main Thread
빨주노초잠만보
빨주노초잠만보
  • 빨주노초잠만보
    과거의 나를 통해 미래의 나를 성장시키자
    빨주노초잠만보
  • 전체
    오늘
    어제
    • 분류 전체보기 (108)
      • 우아한테크코스 (6)
      • TEKHIT ANDROID SCHOOL (4)
      • Android Architecture (8)
      • Android (38)
      • PROJECT (11)
      • KOTLIN (10)
        • 코루틴의 정석 (3)
      • BACK END (12)
      • CS (4)
      • 컨퍼런스 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    flow
    DataSource
    process Context Switching
    의존성 주입
    value class
    2025 우아콘 후기
    orbit
    Throttle
    Compose Typography
    coroutine Context Switching
    repository
    view 생명주기
    retrofit call
    android Room
    ThrottleFirst
    Clean Architecture
    Two pass process
    callbackflow
    thread Context Switching
    MVI
    android view lifecylce
    sealed class
    Repository Pattern
    android clean architecture
    DI
    컴포즈 디자인 시스템
    STATEFLOW
    Room
    안드로이드 디자인 시스템
    코틀린 코루틴의 정석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
빨주노초잠만보
Android Activity Life Cycle
상단으로

티스토리툴바