일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- android
- devicedriver
- 코인거스름돈
- 피보나치
- QoS
- darkmode
- synergy
- 제곱근
- MFC
- DataStructure
- 보늬밤
- WebView
- LRU
- 리틀포레스트
- Collection
- DynamicProgramming
- 피요모리2
- SPI
- 동적프로그래밍
- Dokka
- stack
- FirebaseAuth
- 쌓기게임
- AfxMessageBox
- math
- Kotlin
- Java
- 형변환
- Dialog
- memory
- Today
- Total
퉁탕퉁탕 만들어보자
Activity Lifecycle 본문
Activity의 상태는 launch -> destroy 까지 수명 사이에서 일어나는 주기를 말한다.
Android app을 개발하며 가장 먼저 알아야 하고 중요한 내용이다.
1. onCreate
Activity가 생성되었을 때 불리는 콜백이다.
이 단계에서, 가장 먼저 layout inflate 를 하여 setContentView를 해서 layout과 연결을 한다.
그 외 기타 Activity가 생성될때의 초기화 작업을 하게된다. 이를테면 ViewModel 생성이나 layout내의 뷰와 연결을 한다.
2. onStart
onCreate()이 끝나면 시스템이 자동으로 onStart를 불러준다. 특별한 경우가 아니면, onStart에서 보통 뭔가 처리하지 않는다.
* onStart는 보이기 직전에 불린다. 따라서 onStart에서는 보이지 않는 상태이다.
3. onResume
앱 내에서 focus가 이동하기 전까지 onResume 상태가 유지된다. 동일한 앱이 아닌 다른 앱의 dialog가 뜨거나, 화면이 꺼지거나 하면 focus를 잃고 onPause로 들어가게 되는데, 다만 동일한 activity내에서 띄운 dialog가 뜨면 onPause상태로 진입하지 않는다. onResume에서는 보통, onPause때 일시중지해 놓은 것들의 상태를 다시 원복시키는 작업을 하게된다.
이를테면 video 재생중이었다면 media재생을 일시정지했던것을 다시 재생한다거나, 하는 작업을 한다.
4. onPause()
아까 onResume에서 설명한 방해되는 event가 발생시 onPause 콜백이 불리게 된다. 이 상태는 완전 사라지거나, 멈추었다기 보다는 살짝 일시정지의 느낌이다. multi window 인 경우에는 화면에서 보여도 focus가 사라지면 onPause가 불리게 된다. 일시정지기 때문에 막 resource를 해제하거나 하는짓을 하지않고, 실제로 일시정지만 하고, 쉽게 상태 회복 할 수있을만큼의 처리를 한다.
특히 onPause는 굉장히 잠깐 머무는 상태이기 때문에, onPause안에서 "사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행해서는 안 됩니다." 라고 developer site에서 가이드 되어있다.
이렇게 onPause상태에 있다가 다시 focus를 얻게되면, 외부 다이얼로그가 닫히거나 등등 다시 onResume을 타게된다.
5. onStop()
화면자체가 안보이게 되면 onStop으로 들어가 일시정지가 아닌 중지 상태가 된다.
아까 onPause에서 하지 않았던 사용자 데이터 저장, 네트워크 호출, DB 트랜젝션 등을 하면서 상태를 저장한다.
onStop()에서 다시 리센트나 위에 덮고있던 activity가 사라지게되면 onRestart() -> onStart() -> onResume을 타게 된다.
6. onDestroy()
이제 activity가 아얘 파괴될 예정이다. 이 때 진짜 모든 resource를 해제한다. bitmap같은경우 release를 해주고, member 변수 object들에 null을 할당해서 메모리 해제를 해준다.
onDestory()가 불린이후에 다시 동일 activity가 생성된다면 onCreate를 타게된다.
* 특수상황 - 화면전환/configuration변경은 다음 포스팅에 설명하겠다.
시나리오를 정리하면 아래와 같다.
<시나리오>
Activity실행 중 dialog가 떴고 그 dialog를 닫았을때
RESUME 상태 -> 다이얼로그 뜸 -> onPause -> 다이얼로그 닫음 -> onResume
<시나리오 2>
Activity실행 중 유저가 홈버튼을 눌렀을 때
RESUME 상태 -> 홈버튼 -> onPause -> onStop
리센트를 통해 다시 앱으로 진입했을 때
onRestart -> onStart -> onResume
<시나리오 3>
Activity실행 중 유저가 백버튼을 눌렀을 때
RESUME 상태 -> 백버튼 -> onPause -> onStop -> onDestory
앱을 재실행
onCreate -> onStart-> onResume
<시나리오 4 - 예고편>
Activity 실행 중 유저가 화면전환 또는 configuration change 를 하는경우!
RESUME 상태 -> onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume !
'Computer > Android' 카테고리의 다른 글
Android 시스템 Setting의 값 읽기/쓰기 (0) | 2022.04.16 |
---|---|
내 Activity에서 볼륨 변경을 어떻게 알 수 있을까?(System content observer) (0) | 2022.04.15 |
onSaveInstanceState 는 어떻게 사용하지? (0) | 2022.04.15 |
Activity 화면 전환 시 onConfigurationChanged에서 처리하기 (0) | 2022.04.10 |
Android WebView에 Darkmode 적용하기 (0) | 2021.06.28 |