반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 병럴프로그래밍
- theming
- Gradle
- android
- 안드로이드스튜디오
- mockito
- viewmodel
- 알고리즘
- 자바
- 글또
- 코틀린
- Rxjava
- kotlin강좌
- k8s
- 알게되는
- Compose
- 테스트
- Coroutine
- 디자인패턴
- ReactiveProgramming
- g 단위테스트
- Kotlin
- 회고
- 스레드
- 안드로이드
- 커스텀상태
- 병렬프로그래밍
- 책
- 코루틴
- 안드로이드강좌
Archives
- Today
- Total
선생님, 개발을 잘하고 싶어요.
[Lifecycle] Activity Lifecycle 각 callback 마다 무슨 작업을 하는 것이 좋을까? 본문
개발/android 개발
[Lifecycle] Activity Lifecycle 각 callback 마다 무슨 작업을 하는 것이 좋을까?
알고싶은 승민 2021. 4. 4. 11:32
수명 주기 패러다임
Activity가 새로운 상태에 들어가면 시스템에서 호출하는 콜백
시스템 콜백
내부에서 일어나는 일, 무엇을 구현해야 하는 지
onCreate - 생성됨 상태
내부에서 일어나는 일
- 시스템이 Activity를 생성할 때 실행
- 생성됨 상태 → 시작됨 상태
해야 할 일
- 데이터 바인딩
- 뷰 바인딩
- Activity와 ViewModel 연결
- 클래스 범위 변수 인스턴스화
- 이전 Activity 저장 상태가 포함된 savedInstanceState 세팅
onStart - 시작됨 상태
내부에서 일어나는 일
- Activity가 사용자에게 보임
- 앱은 Activity를 foreground로 보내 상호작용 준비
- 시작됨 상태 → 재개됨 상태
- 매우 빠르게 완료
해야 할 일
- 앱이 UI를 관리하는 코드 초기화
onResume - 재개됨 상태
내부에서 일어나는 일
- foreground에 표시된 후
- 앱이 사용자와 상호작용 가능
- 앱에서 포커스가 떠날 때 까지 이 상태에 머뭄
- 재개됨 상태 → 일시중지됨 상태
해야 할 일
- foreground에 보이는 동안 실행해야 하는 모든 기능 활성화 (ex. 카메라 미리보기)
onPause - 일시중지됨 상태
내부에서 일어나는 일
- Activity가 foreground에 있지 않게 됨
- Activity 다시 시작
- 일시중지됨 상태 → 재개됨 상태 (onResume)
- Activity가 완전히 보이지 않게 됨
- 일시중지됨 상태 → 중단됨 상태 (onStop)
해야 할 일
- 계속 실행되면 안되는 작업을 일시중지하거나 조정
- 사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미치는 모든 리소스 해제
주의 할 것
- 사용자 데이터를 저장, 네트워크 호출, 데이터베이스 트랜잭션 실행하지 않기
- 메서드 실행이 끝나기 전에 완료되지 못할 수도 있다.
- 부하가 큰 종료 작업은 onStop()에서 실행
onStop - 중단됨 상태
내부에서 일어나는 일
- 사용자에게 더 이상 표시되지 않음
- 새로 시작된 Activity가 화면 전체를 차지할 경우
- CPU를 onPause보다 비교적 많이 사용
- Activity가 다시 시작 되는 경우
- 중단됨 상태 → onRestart
- Activity 실행 종료하는 경우
- 중단됨 상태 → onDestroy
해야 할 일
- 화면에 보이지 않을 때 실행할 필요가 없는 기능 정지
- 사용자에게 보이지 않는 동안 필요하지 않은 리소스 해제, 조정
- 애니메이션 일시중지
- 세밀한 위치 조정 → 대략적 위치 업데이트
onDestroy - 소멸됨 상태
내부에서 일어나는 일
- Activity가 소멸되기 전 호출
- 종료되는 경우 (isFinishing == true)
- 구성 변경으로 인해 일시적 소멸
해야 할 일
- 아직 해제되지 않은 모든 리소스 해제
권장 사항
- 구성 변경으로 인해 다시 생성될 경우 별도로 데이터를 관리하는 것은 번거롭다.
- ViewModel을 사용할 것
- onCleared에서 정말 Activity의 소멸 직전 데이터 정리가 가능하다.
- ViewModel을 사용할 것
시스템에 의해 종료되는 프로세스
사용자의 뒤로가기 버튼, finish() 호출
→ 의도된 종료 동작, 인스턴스 유지 필요 없다.
시스템 제약 (구성 변경, 메모리 부족)
→ 프로그래머 의도된 종료 아님. 인스턴스는 파괴됨. 시스템에서 새로운 인스턴스 생성함.
시스템이 이전 상태를 복원하기 위해 사용하는 저장된 데이터: instanceState
Bundle객체로 저장된 키-값 컬렉션
메인 스레드에서 직렬화, 시스템 프로세스 메모리 사용
→ 소량의 데이터를 보존하는 데 적합
Activity간 전환
A → B로 이동
A onPause()
B onCreate()
B onStart()
B onResume()
A onStop()
첫 Activity는 두번째 Activity가 생성되기 전에 완전히 중단되지 않는다.
참고 자료
안드로이드 활동의 이해 문서: developer.android.com/guide/components/activities/activity-lifecycle
'개발 > android 개발' 카테고리의 다른 글
[Android] DataBinding, Custom View에 two-way binding을 하는 방법 (0) | 2021.09.19 |
---|---|
[Android] Custom Font 적용 시 OutOfMemory 발생 및 해결 (0) | 2021.08.26 |
[Deploy] Android App Bundle 을 (늦었지만) 알아보자. (0) | 2021.04.04 |
안드로이드 라이브 데이터 조합해서 사용하기, android livedata 조합하기, combine live data (1) | 2021.01.31 |
Android Custom Dialog 만들기, Fullscreen Dialog 만들기, Transparent Dialog 만들기 (0) | 2021.01.28 |
Comments