Ist ein RelativeLayout teurer als ein LinearLayout?

114

Ich habe RelativeLayout immer verwendet, wenn ich einen View-Container benötigte, weil er flexibel ist, auch wenn ich nur etwas wirklich Einfaches anzeigen wollte.

Ist dies in Ordnung oder sollte ich versuchen, ein LinearLayout zu verwenden, wenn ich kann, unter dem Gesichtspunkt der Leistung / bewährten Verfahren?

Vielen Dank!

nbarraille
quelle

Antworten:

149

In einem Vortrag bei Google I / O 2013 (Schreiben von benutzerdefinierten Ansichten für Android) stellte Romain Guy das Missverständnis klar, das dazu führte, dass jeder RelativeLayouts für alles verwendete. Ein RelativeLayout muss immer zwei Messdurchgänge ausführen. Insgesamt ist es vernachlässigbar, solange Ihre Ansichtshierarchie einfach ist. Wenn Ihre Hierarchie jedoch komplex ist, kann die Durchführung eines zusätzlichen Messdurchlaufs möglicherweise ziemlich kostspielig sein. Auch wenn Sie RelativeLayouts verschachteln, erhalten Sie einen exponentiellen Messalgorithmus.

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

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

Pierre-Antoine LaFayette
quelle
8
Ich weiß, dass dies ein alter Beitrag ist, aber was würden Sie als die kostengünstigste Lösung betrachten, wenn Sie zwischen einem einzelnen relativen Layout und 2-3 linearen Layouts wählen?
Langkiller
5
Ein ConstraintLayout :)
Moyheen
52

Wenn Sie nicht viele Ansichten anlegen (z. B. in einer ListView), ist die Auswahl zwischen LinearLayout und RelativeLayout vernachlässigbar. Wählen Sie die für den Job am besten geeignete aus und sorgen Sie sich nur dann um die Leistung, wenn Sie dies benötigen.

In den offiziellen Dokumenten zum Erstellen effizienter Layouts wird Folgendes über die Leistung von RelativeLayout und LinearLayout gesagt:

Das Festhalten an den Grundfunktionen ist leider nicht die effizienteste Methode zum Erstellen von Benutzeroberflächen. Ein häufiges Beispiel ist der Missbrauch von LinearLayout, der zu einer Zunahme von Ansichten in der Ansichtshierarchie führt. Jede Ansicht - oder schlimmer noch jeder Layout-Manager -, die Sie Ihrer Anwendung hinzufügen, ist mit Kosten verbunden: Initialisierung, Layout und Zeichnung werden langsamer. Der Layoutdurchlauf kann besonders teuer sein, wenn Sie mehrere LinearLayouts verschachteln, die den Gewichtungsparameter verwenden, für den das Kind zweimal gemessen werden muss.

Lie Ryan
quelle
3
die Rechtfertigung dafür ist vernachlässigbar? Ich fand dies, was besagt, dass relativeLayout mehr kostet, als ich vermutete, bitbucket.org/spencerelliott/mercury/issue/1/…
max4ever
Vermeiden Sie einfach das Hinzufügen von Innenbehältern.
Luis Pena
2

Relatives Layout ist effektiver als lineares Layout.

Von hier aus :

Es ist ein weit verbreitetes Missverständnis, dass die Verwendung der grundlegenden Layoutstrukturen zu den effizientesten Layouts führt. Jedes Widget und Layout, das Sie Ihrer Anwendung hinzufügen, erfordert jedoch Initialisierung, Layout und Zeichnung. Die Verwendung verschachtelter Instanzen von LinearLayout kann beispielsweise zu einer übermäßig tiefen Ansichtshierarchie führen. Darüber hinaus kann das Verschachteln mehrerer Instanzen von LinearLayout, die den Parameter layout_weight verwenden, besonders teuer sein, da jedes untergeordnete Element zweimal gemessen werden muss. Dies ist besonders wichtig, wenn das Layout wiederholt aufgeblasen wird, z. B. wenn es in einer ListView oder GridView verwendet wird.

Nicholas Liu
quelle
2
@phreakhead Du hast Recht, dass es keine einzige "richtige" Lösung gibt. Aus diesem Grund besteht die "richtige" Lösung fast immer darin, die Leistung vollständig zu vergessen und das zu tun, was am einfachsten zu schreiben und zu lesen ist.
Kevin Krumwiede
3
Dieses Zitat stützt Ihre Aussage nicht, was nur in einer Situation zutrifft
Flo We
Die wahre Wahrheit ist, dass Sie Ihr Layout so gestalten, dass immer versucht wird, die Anzahl der Hierarchieebenen (Layout innerhalb des Layouts innerhalb des Layouts) zu minimieren, und das Hierarchie-Viewer-Tool überprüfen, um mögliche Probleme zu finden.
Alexander Haroldo da Rocha
1

2018 UPDATE: In der N-Version von Android bietet die ConstraintLayoutKlasse ähnliche Funktionen RelativeLayout, jedoch zu deutlich geringeren Kosten. Es ist ein sehr leistungsfähiger Layout-Manager und sollte immer dann verwendet werden, wenn eine komplexe Benutzeroberfläche erstellt werden muss.

akelec
quelle
seit der letzten Version wurde es sehr sehr langsam
Dragos Rachieru
Es hängt davon ab, wie es verwendet wird. Sie sollten die absolute Positionierung vermeiden und Einschränkungen verwenden.
Akelec
-25

Du kannst es versuchen

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

Sie werden feststellen, dass es viele verschiedene gibt, wenn Ihre Seiten einige Bilder aus dem Internet laden. In diesem Fall ist das LinearLayout 100% besser als das RelativeLayout.

TeeTracker
quelle