1. UI 렌더링 - View의 생명주기
- onMeasure() : rootView와 childView의 size가 결정되면 호출된다.
- onLayOut(): View와 childView의 size 및 포지션을 적용할 때 호출된다.
- onDraw() : View가 화면에 컴포넌트(위젯)을 그릴 준비가 됐을 때 호출된다.
* 래스터화(Rasterization) : 위젯들을 픽셀로 변환시키고, 스크린 상의 textures로 나타내는 변환 과정
2. Activity 생명주기 관련 코멘트
- onPause() : 배터리 수명에 영향이 있는 H/W Sensor Connection 또는 고사양 Resource 제거,
멀티 윈도우로 2개의 App을 쓸 때 다른 앱에 포커스된 경우에도 onPause()가 실행됨
- onStop() : 더 이상 액티비티가 사용자에게 보여지지 않으므로 DB나 API Call등 마무리 관련 로직을 여기에서 구현
2주차 과제 : Activity lifeCycle / Fragment lifeCycle / Fragment 데이터 통신 방식 기술 블로그에 정리하기
3. Activity lifeCycle
Method | Method Call Time? | next Method |
1. onCreate() | 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨. | onStart() |
2. onRestart() | 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨. | onStart() |
3. onStart() | 액티비티가 사용자에게 보여지기 바로 직전에 호출됨. | onResume() 또는 onStop() |
4. onResume() | 액티비티가 사용자와 상호작용하기 바로 전에 호출됨. | onPause() |
5. onPause() | 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드. |
onResume() 또는 onStop() |
6. onStop() | 액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨. 단, 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음. |
onRestart() 또는 onDestroy() |
onSaveInstanceState() | 프로퍼티의 데이터를 저장하여 이후, Bundle로 부터 가져올 수 있게 백업 | |
7. onDestroy() | 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨. |
x |
제대로 이해했는지 파악해보자.
상황 | 나의 답변 | 정답 (틀렸거나 빼먹은 부분 Bold 처리) |
Home 버튼을 눌렀을 때 | onStop -> 다시 App 접속 -> onRestart, onStart |
O / onPause -> onStop -> 다시 App 접속 -> onRestart, onStart, onResume |
B에서 Back 버튼을 눌렀을 때 (스택에 A가 있다고 가정) |
onDestroy | O / onPause, onStop, onDestroy |
A에서 B 액티비티로 이동할 때 | onPause | X / A(onPause) -> B(onCreate, onStart, onResume) -> A(onStop) |
B 액티비티로 이동한 뒤, B 액티비티가 finish()될 때 |
B(onDestroy) -> A | O / B(onPause) -> A(onRestart, onStart, onResume) -> B(onStop, onDestroy) |
가장 기본이 되는 생명주기를 제대로 파악하지 못하고 있었다... 테스트를 만들고 제대로 파악하는 등 과제 해보길 잘한 것 같다.
가끔 참고하기 위해 사진을 남긴다. (ref: https://kairo96.gitbooks.io/android/content/ch2.4.1.html)
4. Fragment lifeCycle
Method | 설명 | Activity의 라이프 사이클에 비유 |
1. onAttach() | Fragment가 FM*에 추가되고, 호스트 액티비티에 연결될 때 호출됨. - Fragment활성화 및 FM* 이/가 생명주기를 관리하기 시작함 |
onCreate() |
2. onCreate() | Fragment만 생성된 상황 | |
3. onCreateView() | Fragment 의 UI 구성 FV*의 생명주기가 생성됨 |
|
4. onViewCreated() | 이전 메소드로부터 View 객체를 전달받아 Lifecycle 상태 갱신 | |
5. onViewStateRestored() | 체크 박스 위젯의 체크 유무 등 UI관련 State를 복원함 저장해둔 모든 state 값이 Fragment의 View 계층구조에 복원됐을 때 호출 |
|
6. onStart() | Fragment가 사용자에게 보여지기 바로 직전에 호출됨. 이때 부터, FM*을 통해 FT*를 안전하게 수행할 수 있음 |
onStart() |
7. onResume() | Fragment가 사용자와 상호작용하기 바로 전에 호출됨. |
onResume() |
8. onPause() | 다른 UI(Activity or Fragment)가 보여질 때 호출됨. | onPause() |
9. onStop() | Host가 중단되거나 상태가 저장될 때 호출됨. ??? | onStop() |
onSaveInstanceState() | 프로퍼티의 데이터를 저장하여 이후, Bundle로 부터 가져올 수 있게 백업함 | 동일 |
10. onDestroyView() | Fragment가 화면에서 사라진 후 호출됨 FV*의 생명주기를 제거, FV의 모든 참조 제거 Back Stack을 처리했다면??? onDestroy가 아닌 이 단계에 머무름 |
onDestroy() |
11. onDestroy() | ??? | |
12. onDetach() | Fragment가 Activity에서 완전히 제거 될 때 호출 |
* FM(Fragment Manager) : 프래그먼트의 생명주기 관리 및 Host와 Child 간의 상호작용이 가능하도록 해주는 Class
* FT(Fragment Transaction) : 실질적으로 프래그먼트를 add, remove, replace, show, hide, commit 하는 class
* FV(Fragment View)
프래그먼트를 제대로 안 써봐서 그런지 설명이 와닿지는 않는 것 같다.
실사용을 해보고 설명을 다시 작성해보자.
5. Fragment 데이터 통신 방식
액티비티-프래그먼트 or 프래그먼트-프래그먼트의 경우 아래와 같은 방법이 있다.
- 1. Bundle : Bundle 객체 생성 -> 데이터 셋업 -> setArguments()
- 2. Fragment Result Api : 위에서 언급했던 FM을 활용
- A: setFragmentsResult("key", bundle) -> FM -> B: setFragmentsResultListener("key")
- 3. ViewModel : ViewModel을 사용하여 데이터 공유 -> 공부해보자
참고하면 좋은 사이트
https://deepakkaligotla.medium.com/activity-fragment-in-android-953f310ca452
'Android' 카테고리의 다른 글
RecyclerView의 Adapter 구현 및 Item Click Event 처리방법 정리 (0) | 2024.04.11 |
---|---|
Adapter, AdapterView 및 ListView, GridView 정리 (0) | 2024.04.11 |
챌린지 3주차 과제 해설 리뷰 (0) | 2024.04.09 |
앱 개발 입문 과제 해설 후기 (1) | 2024.03.29 |
안드로이드 Button 디자인(shape, corners, stroke, gradient) (3) | 2024.03.29 |