LinearLayout 등을 활용해 UI를 쉽게 배치 가능 • Android Studio의 Layout Editor에서 미리보기 제공 단점 • XML과 코드(findViewById())를 연결해야 함 → 번거로움 • RecyclerView 등 동적인 UI 구성 시 코드가 복잡해짐 XML 장점 / 단점
android:layout_height="wrap_content" android:text="Hello,I am a TextView"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello,I am a Button"/> </LinearLayout> View Group View View
얼마나 큰지 관계없이 지정된 크기(경계)가 주어집니다. ◼ MeasureSpec.AT_MOST : 자식은 지정된 크기까지 원하는만큼 커질 수 있습니다. ◼ MeasureSpec.UNSPECIFIED : 부모가 자식에게 어떤 제약도 부과하지 않았습니다. 원하는 크기가 될 수 있습니다. onMeasure()
Color.WHITE paint.textSize = 50f val canvas = surfaceHolder.lockCanvas() if (canvas != null) { try { canvas.drawColor(Color.BLACK) canvas.drawText("Hello", 100f, 100f, paint) } finally { surfaceHolder.unlockCanvasAndPost(canvas) } } Canvas에 그리기 수행 그린 내용을 화면에 표시
전달 ◼ HWC는 하드웨어 수준에서 화면 합성을 수행 ◻ 여러 레이어(UI, 네비게이션바, 상태바 ..)를 하나의 최종 이미지로 합성 ◻ GPU보다 전력 효율이 좋은 전용 디스플레이 하드웨어를 활용하여 합성 작업을 수행 ◼ HWC는 한정된 resource를 가지고 있는 Android에서 GPU의 부담을 줄이고, 디스플레이 하드웨어를 활용하여 최적의 성능을 제공 가능
제공 • 화면 끊김(Jank) 방지 Triple Buffering 도입 • Double Buffering -> Triple Buffering • UI 렌더링 시 GPU가 다음 프레임을 준비하는 동안 CPU가 UI 로직을 동시에 처리가 가능해짐 • Frame Drop 문제 해결 Project Butter
적절한 시점에 실행되도록 스케줄링 V-Sync 동기화 • V-Sync 신호에 맞춰 App의 렌더링 작업을 실행 • 이를 통해 부드러운 화면 구성을 얻을 수 있다. 콜백 등록 • Choreographer에 콜백을 등록하여 V-Sync 신호가 발생할 때 특정 작업을 수행하도록 설정 가능 • 이를 통해 애니메이션, UI 업데이트, 그리기 작업 등을 V-Sync에 맞춰 실행 가능 Choreographer
: 출력 중인 프레임 • Back Buffer1 : 렌더링이 끝난 프레임 • Back Buffer2 : 렌더링 중인 프레임 동작 방식 • GPU가 Back Buffer에서 새 프레임을 그림 • 디스플레이가 준비되면 Back Buffer와 Front Buffer 교체 • 이전 Front Buffer는 Back Buffer로 변경 • 기존에 남아있던 Back Buffer에 다음 프레임 렌더링