web-dev-qa-db-fra.com

Un RelativeLayout est-il plus cher qu'un LinearLayout?

J'ai toujours utilisé RelativeLayout chaque fois que j'avais besoin d'un conteneur View, en raison de sa flexibilité, même si je voulais simplement afficher quelque chose de très simple.

Est-ce correct de le faire, ou devrais-je essayer d'utiliser un LinearLayout quand je le peux, du point de vue des performances/bonnes pratiques?

Merci!

112
nbarraille

Lors d'une conférence à Google I/O 2013 (Écriture de vues personnalisées pour Android), Romain Guy a clarifié le malentendu qui a poussé tout le monde à commencer à utiliser RelativeLayouts pour tout. Un RelativeLayout doit toujours effectuer deux passes de mesure. Dans l'ensemble, il est négligeable tant que votre hiérarchie de vues est simple. Mais si votre hiérarchie est complexe, effectuer une passe de mesure supplémentaire pourrait potentiellement être assez coûteux. De plus, si vous imbriquez RelativeLayouts, vous obtenez un algorithme de mesure exponentielle.

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

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

146

À moins que vous ne disposiez de nombreuses vues (par exemple dans un ListView), les performances de choix entre LinearLayout ou RelativeLayout sont négligeables. Choisissez celui qui est le plus pratique à utiliser pour le travail et ne vous souciez des performances que lorsque vous en avez besoin.

Et voici ce que les documents officiels sur Création de mises en page efficaces dit sur les performances de RelativeLayout et LinearLayout:

S'en tenir aux fonctionnalités de base n'est malheureusement pas le moyen le plus efficace de créer des interfaces utilisateur. Un exemple courant est l'abus de LinearLayout, qui conduit à une prolifération de vues dans la hiérarchie des vues. Chaque vue - ou pire, chaque gestionnaire de mise en page - que vous ajoutez à votre application a un coût: l'initialisation, la mise en page et le dessin deviennent plus lents. La passe de mise en page peut être particulièrement coûteuse lorsque vous imbriquez plusieurs LinearLayout qui utilisent le paramètre de poids, ce qui nécessite que l'enfant soit mesuré deux fois.

52
Lie Ryan

Relativelayout est plus efficace que Linearlayout.

De ici :

Il est faux de penser que l'utilisation des structures de mise en page de base conduit aux mises en page les plus efficaces. Cependant, chaque widget et disposition que vous ajoutez à votre application nécessitent une initialisation, une disposition et un dessin. Par exemple, l'utilisation d'instances imbriquées de LinearLayout peut conduire à une hiérarchie de vues excessivement profonde. En outre, l'imbrication de plusieurs instances de LinearLayout qui utilisent le paramètre layout_weight peut être particulièrement coûteuse car chaque enfant doit être mesuré deux fois. Cela est particulièrement important lorsque la disposition est gonflée à plusieurs reprises, par exemple lorsqu'elle est utilisée dans un ListView ou GridView.

2
Nicholas Liu

MISE À JOUR 2018: Dans la version N d'Android, la classe ConstraintLayout fournit des fonctionnalités similaires à RelativeLayout, mais à un coût nettement inférieur. C'est un gestionnaire de mise en page très puissant et il doit être utilisé chaque fois qu'il est nécessaire de créer une interface graphique complexe.

0
akelec