카테고리 없음

[안드로이드] 왕초보가 보는 안드로이드 생명주기 (1)

구리멍구리 2024. 4. 24. 18:30
반응형

안드로이드를 처음 접하게 되면 생명주기라는게 존재한다는 것을 알게 된다. 나도 처음에는 복잡해보여서 무시하고 개발을 시작했지만
이제 생명주기의 존재를 인정해야 될때가 된 것 같아서 공부하게 되었다. 총 2파트로 나누어서 글을 작성할 예정이다.
이번 게시글은 생명주기의 정의와 흐름도에 대해 정리를 해보았다.

생명주기를 코드로 작성한 예제를 보고 싶다면 아래의 링크로 들어가면된다.

 

[안드로이드][java] 왕초보가 보는 안드로이드 생명주기 - 예제 (2)

이전 포스트에는 Activity의 생명 주기의 순서와 각 역할에 대해 작성을 했었다. 그래서 실제 간단한 코드를 구현하여 앱에 로그를 작성해 확인을 해보려고한다.Activity의 생명 주기의 순서와 각 역

rnflajdrnfl.tistory.com

 


먼저 안드로이드 생명주기에 대해서 공부는 아래 안드로이드 공식사이트 Android Developer에서 하였다. 

https://developer.android.com/codelabs/basic-android-kotlin-compose-activity-lifecycle?hl=ko#0

 

활동 수명 주기 단계  |  Android Developers

이 Codelab에서는 활동 수명 주기와 로깅을 알아봅니다.

developer.android.com

 

안드로이드 생명주기 흐름도

안드로이드 생명주기의 전체적인 흐름은 사진과 흐름도를 보면 된다.

출처 - https://developer.android.com/codelabs/basic-android-kotlin-compose-activity-lifecycle?hl=ko#2

        [ 흐름도 ]

      액티비티 실행
       ↓
         onCreate()
       ↓
       onStart()
       ↓
       onResume()
       ↓
     액티비티 실행중
       ↓
       onPause()
       ↓
       onStop()
       ↓
         onDestroy()
       ↓
      액티비티 종료


액티비티 실행

액티비티가 실행이 되면 아래의 3개 함수가 작동이된다.

      액티비티 실행
       ↓
         onCreate()
       ↓
       onStart()
       ↓
       onResume()
       ↓
     액티비티 실행중
       ↓
       onPause()
       ↓
       onStop()
       ↓
         onDestroy()
       ↓
      액티비티 종료


onCreate()

액티비티가 생성될 호출
UI 설정하고 ,액티비티 초기화에 필요한 모든 요소들을 준비
사용자에게 액티비티가 아직 안보임

주로 실행되는 기능

  • UI 설정: 액티비티의 사용자 인터페이스를 설정함, 주로 setContentView() 메서드를 사용하여 레이아웃을 로드하고 화면에 표시함
  • 초기화 작업: 액티비티에 필요한 데이터 구조를 초기화하고, 앱이 필요로 하는 기본 데이터를 준비하거나 로드함
  • 리소스 바인딩: 레이아웃 파일에 정의된 뷰들을 코드에 연결하고 이벤트 리스너를 설정하여 사용자의 입력을 처리할 준비를함

onStart()

화면에 실제로 UI 그려짐
사용자는 액티비티가 보임

주로 실행되는 기능

  • 가시성 부여: 액티비티가 화면에 나타나고, 필요한 경우 사용자에게 정보를 제공하기 위한 UI 업데이트를 수행함
  • 백그라운드 리소스 관리: 액티비티가 포그라운드로 올라올 필요한 리소스를 다시 활성화하거나 업데이트함
    예를 들어, 위치 정보 업데이트나 센서 데이터를 받기 시작하는 등의 작업을 여기에서 처리를함

onResume()

UI 이벤트 처리가 활성화됨
사용자의 입력을 받을 있습니다.
사용자는 액티비티가 보이고 이벤트 가능(버튼, 입력 데이터 처리)

주로 실행되는 기능

  • 사용자 상호작용 활성화: 액티비티가 완전히 활성화되어 사용자 입력을 받을 수 있게 됩니다. 이 단계에서는 모든 종류의 사용자 입력과 상호작용을 처리할 준비가 됩니다.
  • 실시간 리소스 관리: 액티비티가 완전히 활성 상태에 있을 때 필요한 실시간 데이터 업데이트나, 외부 서비스와의 인터랙션을 관리합니다.
  • UI 업데이트: 사용자에게 최신 정보를 제공하기 위해 UI 동적으로 업데이트하는 작업을 수행합니다. 예를 들어, 네트워크 상태 변경이나 데이터베이스 쿼리 결과를 화면에 반영할 있습니다.

액티비티 종료

액티비티이 종료가 되면 아래의 3개 함수가 작동이된다. 앱 종료 함수는 각 앱 실행 함수를 종료하는 과정이라 생각하면 된다.

onCreate() -onDestroy() / onStart() -onStop() / onResume() - onPause()

      앱 실행
       ↓
         onCreate()
       ↓
       onStart()
       ↓
       onResume()
       ↓
      ※ 앱 실행중
       ↓
       onPause()
       ↓
       onStop()
       ↓
         onDestroy()
       ↓
       앱 종료


onPause()

액티비티가 포그라운드에서 벗어나기 시작하는 단계 
사용자와 상호작용이 멈추는 단계(버튼 안 눌림)

주로 실행되는 기능

  • 사용자 상호작용 중단: 액티비티가 더 이상 활성 상태가 아니므로, 사용자의 입력을 받지 않음
  • 경량 리소스 정리: 빠르게 다시 onResume() 상태로 돌아갈 수 있도록, 메모리를 많이 사용하지 않는 리소스를 해제하거나 저장

onStop()

사용자에게 액티비티가 보이지 않는 단계

주로 실행되는 기능

  • 앱 가시성 손실: 액티비티가 사용자에게 보이지 않게 됩니다. 이 단계에서는 UI 업데이트를 중지하고, 백그라운드 작업을 최소화
  • 중요 리소스 정리: 화면이 꺼지거나 다른 액티비티에 의해 완전히 가려진 경우, 더 이상 필요하지 않은 리소스를 정리하고 중요한 데이터를 저장

onDestroy()

액티비티가 소멸되는 단계

주로 실행되는 기능

  • 리소스의 청소와 해제: 액티비티에 의해 사용된 모든 리소스를 해제하고, 열려 있는 파일 핸들을 닫고, 데이터베이스 연결을 종료하는 등의 작업을 포함
  • 메모리 누수 방지: onDestroy()에서는 액티비티와 관련된 객체 참조를 해제하여, 가비지 컬렉터가 필요 없는 객체를 적절히 수집할 수 있도록 해야 합니다. 이는 메모리 누수를 방지하는 중요한 작업
  • 상태 저장: 액티비티가 재생성될 필요가 있을 상태를 저장하거나, 다음 세션에서 사용될 있는 중요한 정보를 지속적으로 유지할 있도록 처리

 

반응형