Сколько раз может происходить измерение дочерних View во ViewGroup

«Сколько раз может происходить измерение дочерних View во ViewGroup» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В процессе измерения (onMeasure) ViewGroup может вызывать measure() для дочерних View несколько раз, но обычно не более 2 раз:

  1. Первый проход - измерение без ограничений для определения желаемого размера
  2. Второй проход - точное измерение с учетом реальных ограничений родителя

Пример:

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    // Первый measure
    child.measure(unspecifiedSpec, unspecifiedSpec)

    // Второй measure с реальными размерами
    child.measure(realWidthSpec, realHeightSpec)

    setMeasuredDimension(...)
}

Однако в сложных случаях (например, при использовании weight в LinearLayout) может быть больше измерений. Избегайте более 2 измерений для оптимизации производительности.