맞춤 뷰 최적화

동작과 상태 간 전환에 응답하는 잘 디자인된 뷰가 있는 경우 뷰가 빠르게 실행되는지 확인합니다. 재생 중에 UI가 느려지거나 버벅거리는 일을 방지하려면 애니메이션이 초당 60프레임으로 일관되게 실행되어야 합니다.

보기 속도 높이기

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

onDraw()를 간소화하는 것 외에도 최대한 자주 호출되지 않도록 해야 합니다. 대부분의 onDraw() 호출은 invalidate() 호출의 결과이므로 불필요한 invalidate() 호출을 제거합니다.

큰 비용이 드는 또 하나의 작업은 레이아웃 순회입니다. 뷰에서 requestLayout()를 호출하면 Android UI 시스템은 전체 뷰 계층 구조를 순회하여 각 뷰의 크기가 얼마나 되어야 하는지 찾습니다. 충돌하는 측정이 발견되면 계층 구조를 여러 번 순회할 수 있습니다. UI 디자이너는 중첩된 ViewGroup 객체의 심층 계층 구조를 만듭니다. 이러한 심층 뷰 계층 구조로 인해 성능 문제가 발생하므로 뷰 계층 구조를 가능한 한 얕게 만들어야 합니다.

복잡한 UI가 있다면 레이아웃을 실행할 맞춤 ViewGroup 작성을 고려해 보세요. 기본 제공 뷰와 달리 맞춤 뷰는 애플리케이션별로 하위 요소의 크기와 모양을 가정할 수 있으므로 측정값을 계산하기 위해 하위 요소를 순회하는 것을 피할 수 있습니다.

예를 들어 모든 하위 뷰에 맞게 자체 크기를 조정하지 않는 맞춤 ViwGroup가 있는 경우 모든 하위 뷰를 측정하는 오버헤드가 방지됩니다. 다양한 사용 사례에 적합한 기본 제공 레이아웃을 사용하는 경우에는 이러한 최적화가 불가능합니다.