RelativeLayout, LinearLayout'tan daha mı pahalı?


114

Her zaman RelativeLayout'u her zaman bir View kapsayıcısına ihtiyaç duyduğumda kullanıyordum, çünkü gerçekten basit bir şey göstermek istesem bile esnekliği nedeniyle.

Bunu yapmak doğru mu, yoksa performans / iyi uygulamalar açısından elimden geldiğince bir Doğrusal Yerleşim kullanmayı denemeli miyim?

Teşekkürler!

Yanıtlar:


149

Google I / O 2013'teki bir konuşmada (Android için Özel Görünümler Yazma) Romain Guy, herkesin her şey için RelativeLayouts'u kullanmaya başlamasına neden olan yanlış anlamayı açıklığa kavuşturdu. RelativeLayout her zaman iki ölçü geçişi yapmak zorundadır. Genel olarak, görünüm hiyerarşiniz basit olduğu sürece ihmal edilebilir. Ancak hiyerarşiniz karmaşıksa, fazladan bir geçiş yapmak potansiyel olarak oldukça maliyetli olabilir. Ayrıca RelativeLayouts'u iç içe yerleştirirseniz, üstel bir ölçüm algoritması elde edersiniz.

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

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


8
Bunun eski bir gönderi olduğunu biliyorum, ancak tek bir göreceli düzen ile 2-3 doğrusal düzen arasında seçim yaparken en düşük maliyetli çözüm olarak ne düşünürdünüz?
Langkiller

5
A ConstraintLayout :)
moyheen

52

Çok sayıda Görünüm yerleştirmediğiniz sürece (örneğin bir ListView'da), Doğrusal Yerleşim veya Göreli Yerleşim arasında seçim yapma performansı ihmal edilebilir. İş için hangisinin en uygun olduğunu seçin ve yalnızca ihtiyacınız olduğunda performans konusunda endişelenin.

Ve Verimli Düzenler Oluşturma hakkındaki resmi belgelerin RelativeLayout ve LinearLayout performansı hakkında söyledikleri:

Temel özelliklere bağlı kalmak maalesef kullanıcı arayüzleri oluşturmanın en verimli yolu değildir. Yaygın bir örnek, görünüm hiyerarşisinde görüşlerin çoğalmasına yol açan LinearLayout'un kötüye kullanılmasıdır. Uygulamanıza eklediğiniz her görünümün - veya daha kötüsü, her yerleşim yöneticisinin - bir maliyeti vardır: başlatma, düzen ve çizim yavaşlar. Düzen geçişi, alt öğenin iki kez ölçülmesini gerektiren ağırlık parametresini kullanan birkaç LinearLayout yerleştirdiğinizde özellikle pahalı olabilir.


3
gerekçesi önemsiz mi? ben bu relativeLayout daha adil ı şüpheli olarak maliyeti devletler hangi bulundu bitbucket.org/spencerelliott/mercury/issue/1/...
max4ever

İç kap eklemekten kaçının.
Luis Pena

2

Relativelayout, Linearlayout'tan daha etkilidir.

Gönderen burada :

Temel düzen yapılarının kullanılmasının en verimli yerleşim planlarına yol açtığı yaygın bir yanılgıdır. Bununla birlikte, uygulamanıza eklediğiniz her widget ve düzen, başlatma, düzen ve çizim gerektirir. Örneğin, LinearLayout'un iç içe geçmiş örneklerini kullanmak, aşırı derecede derin bir görünüm hiyerarşisine yol açabilir. Ayrıca, layout_weight parametresini kullanan birkaç LinearLayout örneğini iç içe yerleştirmek, her çocuğun iki kez ölçülmesi gerektiğinden özellikle pahalı olabilir. Bu, özellikle bir ListView veya GridView'da kullanıldığında olduğu gibi düzen tekrar tekrar şişirildiğinde önemlidir.


2
@phreakhead Tek bir "doğru" çözüm olmadığı konusunda haklısınız. Bu nedenle "doğru" çözüm, neredeyse her zaman performansı tamamen unutmak ve yazması ve okuması en kolay olanı yapmaktır.
Kevin Krumwiede

3
bu alıntı ifadenizi desteklemez, ki bu yalnızca bir durumda doğrudur
Flo

Gerçek şu ki, mizanpajınızı her zaman hiyerarşi düzeylerinin sayısını (mizanpaj içindeki mizanpaj içindeki mizanpaj) en aza indirmeye çalışarak tasarlayın ve potansiyel sorunları bulmak için hiyerarşi görüntüleyici aracını kontrol edin.
Alexander Haroldo da Rocha

1

2018 GÜNCELLEME: Android'in N sürümünde, ConstraintLayoutsınıf, ile benzer işlevsellik sağlar RelativeLayout, ancak önemli ölçüde daha düşük bir maliyetle. Çok güçlü bir düzen yöneticisidir ve karmaşık bir GUI oluşturmak gerektiğinde kullanılmalıdır.


en son sürümden bu yana çok yavaşladı
Dragos Rachieru

Nasıl kullanıldığına bağlıdır. Mutlak konumlandırmadan kaçınmalı ve kısıtlamalar kullanmalısınız.
akelec

-25

Deneyebilirsin

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

Sayfalarınız internetten bazı resimler yüklüyorsa, çok farklı olduğunu göreceksiniz. Bu durumda LinearLayout, RelativeLayout'tan% 100 daha iyi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.