일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DiffUtil
- GetX
- apk 빌드 과정
- AAC
- AsyncListDiffer
- Dispatchers
- 물리 메모리
- 안드로이드
- 자이고트
- http발전과정
- 절대 주소
- NestedScrollView
- 데코레이터 패턴
- 뷰홀더
- 상태관리
- 디자인 패턴
- 플로이드워셜
- 내부 단편화
- http 역사
- appcompatactivity
- 리사이클러뷰풀
- 리사이클러뷰
- flutter
- Kotlin
- 프로세스
- 운영체제
- viewModelScope
- Android
- recyclerview
- appcompatacitivity
- Today
- Total
hong's android
[안드로이드] View lifecycle 본문
뷰는 어떻게 그려질까?
액티비티는 focus를 받으면 레이아웃을 그리도록 요청한다. 그러면 view tree의 루트노드부터 순회하면서 차례대로 뷰를 그리게 된다.(Android 프레임워크는 레이아웃 그릴 수 있게 하지만 액티비티에서 따로 Root node를 제공해줘야 한다.) view는 자체적으로 생명주기를 가지고 있고 뷰 그룹이 하위 요소들을 그리도록 요청한다. 측정단계와 레이아웃단계를 통해 그려진다.
1.Measure
뷰의 크기를 측정한다. 실제 뷰의 크기를 측정하기 위해 onMeasure()를 호출한다.
부모 뷰와 자식 뷰 간의 크기를 측정하기 위해 아래 클래스들을 사용한다.
A. ViewGrop.LayoutParams
자식뷰가 부모뷰에게 자신이 어떻게 측정되는지 요청할때 해당 클래스 사용.
B.ViewGroup.MeasureSpecs
부모뷰가 자식뷰에게 요구사항을 전달할때 해당 클래스 사용.
2.Layout
뷰의 크기, 위치를 할당할때 사용한다. 위치를 측정할 때 Measure() 단계에서 반환된 측정값을 활용한다.
실제 뷰의 크기 및 위치를 할당하기 위해 onLayout()을 호출한다.
뷰의 measure()가 반환될때 getMeasureWidth()와 getMeasureHeight() 값을 이용하는데 해당 값이 너무 작거나 클 경우 다시 measure()를 호출할 수 있다.
View lifecycle
1.constructor
생성자
2.onAttachedToWindow
뷰가 윈도에 연결될 때
3.onMeasure
(위 설명과 같다.)
4.onLayout
(위 설명과 같다.)
5.onDraw
Canvas 객체와 paint 객체를 사용해서 뷰를 그리는 단계
화면의 구성단위
1.Window
화면 구성의 가장 상위 요소이다.
2.Surface
Window위에 Surface가 존재한다. 화면에 합성되는 픽셀을 보유한 객체이다.
Surface Flinger에 의해서 Surface들의 픽셀들이 합성된다.
3.Canvas
드로잉 메서드를 가진 클래스
4.View
인터랙티브 한 ui요소(Textview, Button)
Refence.
https://velog.io/@jaeyunn_15/Android-View가-렌더링되는-과정
https://namneul.tistory.com/34
https://developer.android.com/guide/topics/ui/how-android-draws
'Android > Android' 카테고리의 다른 글
[안드로이드] setcontentview(), Layoutinflater (0) | 2023.01.31 |
---|---|
[안드로이드] Pendingintent (0) | 2023.01.31 |
[안드로이드] Handler, Content Provider, xml 레이아웃 (0) | 2023.01.14 |
[안드로이드] 자이고트 (0) | 2023.01.13 |
[안드로이드] 포어그라운드 서비스 VS 백그라운드 서비스 (0) | 2023.01.10 |