Является ли RelativeLayout более дорогим, чем LinearLayout?

Я всегда использовал RelativeLayout каждый раз, когда мне нужен контейнер View, из-за его гибкости, даже если бы я просто хотел показать что-то очень простое.

Можно ли это сделать, или я должен попытаться использовать LinearLayout, когда смогу, с точки зрения производительности/хорошей практики?

Спасибо!

Ответ 1

В разговоре с Google I/O 2013 ( "Написание пользовательских представлений для Android" ) Ромен Гай разъяснил недоразумение, которое заставило всех начать использовать RelativeLayouts для всего. RelativeLayout всегда должен выполнять два прохода. В целом это незначительно, если ваша иерархия просмотров проста. Но если ваша иерархия сложна, выполнение дополнительной меры может потенциально быть довольно дорогостоящим. Также, если вы вставляете RelativeLayouts, вы получаете экспоненциальный алгоритм измерения.

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=1m41s

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=38m04s

Ответ 2

Если вы не выделяете много видов (например, в ListView), производительность выбора между LinearLayout или RelativeLayout незначительна. Выберите, что наиболее удобно использовать для работы, и беспокоиться о производительности, только когда вам нужно.

И вот что официальные документы о Создание эффективных макетов говорят об эффективности RelativeLayout и LinearLayout:

Придерживаясь основных функций, к сожалению, не самый эффективный способ создания пользовательских интерфейсов. распространенным примером является злоупотребление LinearLayout, что приводит к распространение взглядов в представлении иерархия. Каждый взгляд - или, что еще хуже, каждый менеджер компоновки - что вы добавляете к ваше приложение оплачивается: инициализация, макет и чертеж становятся медленнее. Пропуск макета может быть особенно дорого, когда вы гнездились несколько LinearLayout, которые используют весовой параметр, который требует ребенок будет измеряться дважды.

Ответ 3

Relativelayout более эффективен, чем Linearlayout.

Из здесь:

Это распространенное заблуждение, что использование основных структур компоновки приводит к наиболее эффективным макетам. Однако каждый виджет и макет, которые вы добавляете в приложение, требуют инициализации, макета и чертежа. Например, использование вложенных экземпляров LinearLayout может привести к чрезмерно глубокой иерархии представлений. Кроме того, вложение нескольких экземпляров LinearLayout, использующих параметр layout_weight, может быть особенно дорогостоящим, так как каждый ребенок должен быть измерен дважды. Это особенно важно при многократном раздутии макета, например при использовании в ListView или GridView.

Ответ 4

Вы можете попробовать

<LinearLayout>
       <ViewPager/><!--Loading images from net, it is very good as a testing case.-->
       <ViewPagerIndicator/>
       <TextView/> <!--Show some info about page-->
</LinearLayout>

<RelativeLayout>           
       <ViewPager/><!--Loading images from net, it is very good as a testing case.-->
       <ViewPagerIndicator below="id of ViewPager"/>
       <TextView below="id of ViewPagerIndicator"/> <!--Show some info about page-->
</RelativeLayout>

Вы обнаружите, что есть много разных, если ваши страницы загружают некоторые изображения из Интернета. В этом случае LinearLayout на 100% лучше, чем RelativeLayout.