Является ли RelativeLayout дороже, чем LinearLayout? - PullRequest
112 голосов
/ 01 ноября 2010

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

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

Спасибо!

Ответы [ 5 ]

145 голосов
/ 06 июля 2013

В своем выступлении на 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

52 голосов
/ 01 ноября 2010

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

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

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

2 голосов
/ 02 марта 2015

Относительное планирование более эффективно, чем Linearlayout.

С здесь :

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

0 голосов
/ 21 апреля 2018

2018 ОБНОВЛЕНИЕ: В N-версии Android класс ConstraintLayout обеспечивает функциональность, аналогичную RelativeLayout, но при значительно более низкой стоимости.Это очень мощный менеджер компоновки, и его следует использовать всякий раз, когда необходимо создать сложный графический интерфейс.

0 голосов
/ 08 ноября 2013

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

<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.

...