Android

[Android] Layout은 어떻게 그릴까

김한토 2025. 2. 26. 14:37
반응형

웹뷰에 radius를 적용하면서 삽질을 하며 공부한 내용을 정리해 보려고 한다.
항상 편리하게 제공된거만 쓰다보니 근본적인 과정을 몰랐고 이 때문에 이렇게 헤맨 것 같다. 진짜 간단한 거라도 제대로 알고 써야 하는 게 정말 중요한 것 같다.... ㅇㅔ휴..~
 

https://developer.android.com/guide/topics/ui/how-android-draws

Android에서 뷰를 그리는 방법  |  Views  |  Android Developers

활동이 포커스를 받으면 레이아웃을 그리라는 요청을 받습니다. Android 프레임워크에서 그리기 절차를 처리하지만 활동에서 레이아웃 계층 구조의 루트 노드를 제공해야 합니다. 그리기는 레이

developer.android.com

 
https://developer.android.com/guide/fragments/lifecycle?hl=ko

프래그먼트 수명 주기  |  App architecture  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 프래그먼트 수명 주기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 각 Fragment 인스턴스에는 고유한

developer.android.com

 
 
안드로이드에서 레이아웃이 그려지는 과정은 measure -> Layout -> Draw 의 세 단계로 이루어진다. 
 
https://developer.android.com/guide/topics/ui/how-android-draws

Android에서 뷰를 그리는 방법  |  Views  |  Android Developers

활동이 포커스를 받으면 레이아웃을 그리라는 요청을 받습니다. Android 프레임워크에서 그리기 절차를 처리하지만 활동에서 레이아웃 계층 구조의 루트 노드를 제공해야 합니다. 그리기는 레이

developer.android.com

 
1. Measure (측정 단계)
뷰의 크기를 결정한다. 부모뷰가 자식뷰에게 자식뷰 자신의 크기를 측정하라고 요청한다. 그러면 자식뷰는 자신의 크기를 계산하고, 뷰모뷰에게 결과를 반환한다. 이 과정에서 onMeasure()메서드가 호출된다. 
 
2. Layout(배치 단계)
뷰의 위치를 결정한다. 부모뷰가 자식뷰의 위치를 결정한다. 이 과정에서 onLayout() 매서드가 호출된다. 
 
3. Draw(그리기 단계)
뷰를 화면에 그린다. 뷰는 자기의 배경, 컨텐츠, 자식 뷰 등을 그린다. 이과정에서 onDraw 메서드가 호출된다. onmDraw는 성능에 영향을 미치는 중요한 메서드이므로, 불필요한 작업을 피해야한다. 
 
 

[Fragment 생명주기]          [뷰 그리기 과정]
-------------------          -----------------
onCreateView                 뷰 생성 (XML 또는 코드로 뷰 생성)
   |                             |
   v                             v
onViewCreated                뷰 초기화 (뷰 바인딩, 리스너 설정 등)
   |                             |
   v                             v
onStart                      Measure → Layout → Draw (뷰 그리기)
   |                             |
   v                             v
onResume                     뷰가 화면에 완전히 그려짐 (사용자와 상호작용 가능)

 
번외))
 

onCreateView와 onViewCreated의 차이점

 

onCreateView

  • 역할:
    Fragment의 뷰를 생성하고 반환하는 역할을 한다..
  • 호출 시점:
    Fragment가 화면에 보여질 준비를 할 때 호출된다.
  • 주요 작업:
    LayoutInflater를 사용해서 XML 레이아웃 파일을 뷰 객체로 변환하거나, 코드로 뷰를 직접 생성한다.
    이때 뷰는 생성되지만, 아직 초기화는 되지 않은 상태.
  • 주의사항:
    이 메서드에서는 뷰를 생성하고 반환하는 데 집중하는 것이 좋다.
    뷰 바인딩이나 리스너 설정 같은 초기화 작업은 여기서 하지 않는 것이 좋다.

onViewCreated

  • 역할:
    뷰가 생성된 후 초기화 작업을 수행
  • 호출 시점:
    onCreateView에서 뷰가 생성된 직후에 호출된다.
  • 주요 작업:
    뷰 바인딩, 리스너 설정, 데이터 로딩 등 뷰와 관련된 초기화 작업을 여기서 처리
    이 시점에서는 뷰가 생성되었고, 초기화 작업을 완료하는 단계
  • 주의사항:
    무거운 작업(예: 네트워크 요청, 데이터베이스 조회)은 비동기적으로 처리해야한다. 
    메인 스레드에서 이런 작업을 하면 앱이 멈출 수 있기 때문이다.
반응형