hong's android

[안드로이드] View lifecycle 본문

Android/Android

[안드로이드] View lifecycle

_hong 2023. 1. 16. 20:54

뷰는 어떻게 그려질까?

액티비티는 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