Intro..
간단한 기능들이 돌아가게 하는 코드를 어느정도 짜봤다면,
그리고 어느정도 안드로이드와 친해졌다면,
이제는 MVVM과 같은 아키택쳐와 메모리 누수 등을 신경쓰는 부분도 다뤄야한다.
왜일까??
MVC, MVP, MVVM, CA 와 같은 아키택쳐로 코드를 짜면 일관적이고 수정이 용이하며 정리되고 직관적인 코드를 짤수있음
(한 엑티비티에 코드가 수백줄 있고 구조를 본인도 알아보기 힘들다면 아키택쳐 공부 강추..)
메모리 누수를 신경쓰면, 불필요한 자원 낭비를 막아 앱이 느려지고 꺼지고 무거워지는 문제점을 해결 할 수 있다.
점점 앱의 크기가 커지거나 다루는 데이터가 많아질수록 이 부분의 필요를 절실히 느낄것이다.
아무튼!! 이런 부분들에 접근하고 능숙해진다면 이 모바일 시장을 헤쳐나갈 수 있다고 생각한다.
따라서 이번 포스팅에선 Activity Lifecycle 을 다뤄 전체적인 엑티비티 생명주기를 알고,
이 단계에 맞춰 코드를 짠다면, BaseActivity를 이용한다면 전체적으로 더 깔끔해 질 수 있다.
Activity Lifecycle

- onCreate( )
- 필수 구성요소 초기화,
viewModel과 연결 등의 과정. - 시스템이 activity 생성시 반드시 구현해야하는 함수.setContentView를 호출해 화면에 띄울 UI를 정의해야 하기때문에.
- savedInstanceState 를 가지고 있기 때문에 이쪽에서 정보를 꺼내 쓸 수 있음.
- 여기서 ViewBinding or DataBinding 연결 함
- 필수 구성요소 초기화,
- onStart( )
- Activity가 사용자에게 표시되기 이전 단계
- Activity가 Background 에서 Forground로 나와 사용자 상호작용을 준비
- Broadcast Receiver는 여기서 등록됨.
- onResume( )
- Actvitiy가 사용자와 상호작용 시작 바로 직전에 호출되는 함수
- onPause 작업으로 해제됐던 리소스들을 다시 초기화시켜야함
- 앱의 핵심 기능 대부분은 이 함수 안에 구현해야 함
- onPause( )
- 화면 일부만 가려질때
- 뒤로가기 버튼과 같이 Activity가 포커스를 잃게 될 때
즉, 더 이상 표시되지 않을 때 호출됨 - 이 단계 까지는 UI 를 계속 업데이트 가능함 ( 네비게이션 내 위치 이동)
- 여기서 애플리케이션 또는 사용자 데이터 저장, 네트워크 호출, DB 트렌잭션은 절대 하면 안됨.
⇒ 다 못 끝내고 꺼져버릴수도있음 - 부하가 큰 종료 작업은 onStop( )에서 쓰는게 좋다
- onStop( )
- 화면이 완전히 가려질때
- 새로 시작된 Activity가 화면 전체를 차지하는 경우 해당. 또는 엑티비티 종료할때 해당
- 앱이 사용자에게 안보일 경우 사용하지 않는 리소스들을 해제 , 조정함 (애니메이션)
- 정보를 DB에 저장할때와 같이 많이걸리는 친구들을 이 단계에서도 진행가능.
- 여전히 이 단계에서는 Activity가 메모리안에 있음.
- onDestroy( )
- Activity 소멸 직전 호출.
- Activity 완전 닫거나 Finish 함수를 호출할 경우,
- 기기 회전 등으로 일시적 Activity 소멸 시.
- 이전 콜백에서 아직 해제되지 않은 모든 리소스를 해제해야 함
- Activity 소멸 직전 호출.
화면 전환 & 새 엑티비티 호출 시 어떻게 변화될까?
정상 작동하다가 화면전환 발생 시
onPause( ) -> onSaveInstanceState( ) -> onStop( ) -> onDestroy( ) ->
새 엑티비티 onStart( ) -> onRestoreInstanceState( ) -> onResume( )
새(New) 엑티비티 호출 시
기존 onPause( ) -> New onCreate( ) -> New onStart( ) -> New onResume( ) -> 기존 onStop( )
학부생 레벨에서 쓴 글로, 다소 부족한 부분이 있을 수 있으니 친절한 피드백을 매우 환영합니다.
'Android' 카테고리의 다른 글
| [Android] Context 의 정의와 종류.. 근데 잘못쓰면 메모리 누수?! (0) | 2023.06.25 |
|---|---|
| [Android] Fragment의 정의와 필요성, Lifecycle 및 이에 따른 대응. (0) | 2023.06.25 |
| [Android] Activity 가 있는데 Fragment는 왜 써? (0) | 2023.06.05 |
| [Android] 메모리 영역과 JVM Garbage Collecter (JVM, DVM, ART) (0) | 2023.05.22 |
| [Android] JVM, DVM, ART (2) | 2023.05.19 |