[안드로이드] 왕초보가 보는 안드로이드 생명주기 (1)
안드로이드를 처음 접하게 되면 생명주기라는게 존재한다는 것을 알게 된다. 나도 처음에는 복잡해보여서 무시하고 개발을 시작했지만
이제 생명주기의 존재를 인정해야 될때가 된 것 같아서 공부하게 되었다. 총 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
안드로이드 생명주기 흐름도
안드로이드 생명주기의 전체적인 흐름은 사진과 흐름도를 보면 된다.
[ 흐름도 ]
액티비티 실행
↓
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()에서는 액티비티와 관련된 객체 참조를 해제하여, 가비지 컬렉터가 필요 없는 객체를 적절히 수집할 수 있도록 해야 합니다. 이는 메모리 누수를 방지하는 중요한 작업
- 상태 저장: 액티비티가 재생성될 필요가 있을 때 상태를 저장하거나, 다음 세션에서 사용될 수 있는 중요한 정보를 지속적으로 유지할 수 있도록 처리