뷰 최적화

동작과 상태 간 전환에 응답하는 잘 설계된 뷰를 갖추었으므로 이제는 이 뷰가 빠르게 실행되게 해야 합니다. UI가 재생 중 느려지거나 버벅거리는 일을 방지하려면 애니메이션을 초당 60프레임으로 일관되게 실행해야 합니다.

간소화 및 빈도 낮추기

보기 속도를 높이려면 자주 호출되는 루틴에서 불필요한 코드를 제거하세요. onDraw()에서 작업을 시작하면 최대 효과를 얻을 수 있습니다. 특히 할당은 버벅거림을 유발하는 가비지 컬렉션으로 이어질 수 있기 때문에 onDraw()에서 할당을 제거해야 합니다. 초기화 중 또는 애니메이션 간에 개체를 할당합니다. 애니메이션이 실행되고 있는 동안에는 절대 할당하지 마세요.

onDraw()를 간소화하는 것 외에도 호출되는 빈도를 최대한 낮추어야 합니다. onDraw() 호출은 대부분 invalidate()를 호출한 결과로 발생하므로 불필요하게 이루어지는 invalidate() 호출은 제거하세요.

많은 성능이 소요되는 또 하나의 작업은 레이아웃 순회입니다. 뷰에서 requestLayout()을 호출할 때마다 Android UI 시스템에서는 전체 뷰 계층 구조를 순회하여 각 뷰의 크기가 얼마나 되어야 하는지 알아내야 합니다. 측정치 간 충돌이 발견되는 경우 시스템에서는 계층 구조를 여러 번 순회해야 합니다. 때로 UI 디자이너는 UI가 제대로 작동하도록 중첩된 ViewGroup 개체로 구성된 심층적인 계층 구조를 만듭니다. 이 심층적인 뷰 계층 구조로 인해 성능 관련 문제가 발생합니다. 그러므로 뷰 계층 구조를 가능한 한 얕게 만드세요.

복잡한 UI가 있는 경우 레이아웃을 수행할 맞춤 ViewGroup 작성을 고려하세요. 기본 제공 뷰와 달리 맞춤 뷰에서는 애플리케이션별로 하위 요소의 크기 및 모양을 추정할 수 있으므로 측정치 계산을 위해 하위 요소를 순회하지 않아도 됩니다. PieChart 예시에서는 ViewGroup을 맞춤 뷰의 일부로 확장하는 방법을 보여줍니다. PieChart에는 하위요소 뷰가 있지만 측정하지는 않습니다. 대신 자체 맞춤 레이아웃 알고리즘에 따라 크기를 직접 설정합니다.