¿Es un RelativeLayout más caro que un LinearLayout?

114

Siempre he estado usando RelativeLayout cada vez que necesitaba un contenedor de vista, debido a su flexibilidad, incluso si solo quería mostrar algo realmente simple.

¿Está bien hacerlo, o debería intentar usar un LinearLayout cuando pueda, desde el punto de vista del rendimiento / buenas prácticas?

¡Gracias!

nbarraille
fuente

Respuestas:

149

En una charla en Google I / O 2013 (Escribir vistas personalizadas para Android), Romain Guy aclaró el malentendido que hizo que todos comenzaran a usar RelativeLayouts para todo. Un RelativeLayout siempre tiene que realizar dos pasadas de medida. En general, es insignificante siempre que su jerarquía de vistas sea simple. Pero si su jerarquía es compleja, hacer un pase de medida adicional podría ser bastante costoso. Además, si anida RelativeLayouts, obtiene un algoritmo de medición exponencial.

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

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

Pierre-Antoine LaFayette
fuente
8
Sé que esta es una publicación antigua, pero ¿cuál consideraría la solución menos costosa al elegir entre un solo diseño relativo y 2-3 diseños lineales?
Langkiller
5
A ConstraintLayout :)
moyheen
52

A menos que esté diseñando muchas Vistas (por ejemplo, en un ListView), el rendimiento de elegir entre LinearLayout o RelativeLayout es insignificante. Elija el que sea más conveniente para el trabajo y preocúpese por el rendimiento solo cuando lo necesite.

Y esto es lo que dicen los documentos oficiales sobre la creación de diseños eficientes sobre el rendimiento de RelativeLayout y LinearLayout:

Lamentablemente, ceñirse a las funciones básicas no es la forma más eficaz de crear interfaces de usuario. Un ejemplo común es el abuso de LinearLayout, que conduce a una proliferación de vistas en la jerarquía de vistas. Cada vista, o peor aún, cada administrador de diseño que agrega a su aplicación tiene un costo: la inicialización, el diseño y el dibujo se vuelven más lentos. El pase de diseño puede ser especialmente costoso cuando anida varios LinearLayout que usan el parámetro de peso, que requiere que el niño se mida dos veces.

Mentira Ryan
fuente
3
¿La justificación es insignificante? Encontré esto que indica que el diseño
max4ever
Simplemente evite agregar contenedores internos.
Luis Peña
2

El diseño relativo es más eficaz que el diseño lineal.

Desde aqui :

Es un error común pensar que el uso de estructuras de diseño básicas conduce a diseños más eficientes. Sin embargo, cada widget y diseño que agregue a su aplicación requiere inicialización, diseño y dibujo. Por ejemplo, el uso de instancias anidadas de LinearLayout puede generar una jerarquía de vista excesivamente profunda. Además, anidar varias instancias de LinearLayout que utilizan el parámetro layout_weight puede resultar especialmente caro, ya que cada niño debe medirse dos veces. Esto es particularmente importante cuando el diseño se infla repetidamente, como cuando se usa en ListView o GridView.

Nicolás Liu
fuente
2
@phreakhead Tienes razón en que no existe una única solución "correcta". Por eso, la solución "correcta" es casi siempre olvidarse por completo del rendimiento y hacer lo que sea más fácil de escribir y leer.
Kevin Krumwiede
3
esa cita no respalda su declaración, que solo es cierta en una situación
Flo We
La verdad es que diseñe su diseño siempre tratando de minimizar el número de niveles de jerarquía (diseño dentro del diseño dentro del diseño) y verifique la herramienta de visualización de jerarquías para encontrar problemas potenciales.
Alexander Haroldo da Rocha
1

ACTUALIZACIÓN 2018: En la versión N de Android, la ConstraintLayoutclase proporciona una funcionalidad similar RelativeLayout, pero a un costo significativamente menor. Es un administrador de diseño muy poderoso y debe usarse siempre que sea necesario para construir una GUI compleja.

Akelec
fuente
desde la última versión se volvió muy, muy lento
Dragos Rachieru
Depende de cómo se utilice. Debe evitar el posicionamiento absoluto y las restricciones de uso.
akelec
-25

Puedes probar

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

Encontrará que hay muchas diferentes, si sus páginas cargan algunas imágenes de Internet. En este caso, LinearLayout es 100% mejor que RelativeLayout.

TeeTracker
fuente