Две основные причины проблем с перформансом отрисовки лэйаутов:
• Глубокая вложенность. Плоские лэйауты отрисовываются быстрее, чем вложенные с тем же количеством View.
•
Double taxation. Так называется ситуация, когда для лэйаута шаги
onMeasure() и
onLayout() вызываются дважды. Например, double taxation случается при
использовании атрибута
weight в
LinearLayout.
Для того, чтобы избежать проблем с производительностью следует придерживаться следующих правил:
•
LinearLayout c текстом и картинкой следует заменять на
TextView с
Compound Drawable.
• Если в качестве корневого лэйаута используется
FrameLayout без кастомизированных атрибутов, то его можно заменить тегом
<merge>.
• Использовать
<merge> для лэйаутов, которые
вкладываются в другие лэйауты;
• Использовать
ConstraintLayout вместо
RelativeLayout.
• Быть осторожным с атрибутом
layout_weight в
LinearLayout и не использовать
layout_weight в
нескольких вложенных лэйаутах.