Apakah RelativeLayout lebih mahal daripada LinearLayout?

114

Saya selalu menggunakan RelativeLayout setiap kali saya membutuhkan penampung Tampilan, karena fleksibilitasnya, bahkan jika saya hanya ingin menampilkan sesuatu yang sangat sederhana.

Bolehkah melakukannya, atau haruskah saya mencoba menggunakan LinearLayout jika saya bisa, dari sudut pandang kinerja / praktik yang baik?

Terima kasih!

nbarraille
sumber

Jawaban:

149

Dalam perbincangan di Google I / O 2013 (Menulis Tampilan Kustom untuk Android), Romain Guy mengklarifikasi kesalahpahaman yang menyebabkan semua orang mulai menggunakan RelativeLayouts untuk semuanya. RelativeLayout selalu harus melakukan dua langkah pengukuran. Secara keseluruhan ini dapat diabaikan selama hierarki tampilan Anda sederhana. Tetapi jika hierarki Anda rumit, melakukan langkah ekstra mungkin cukup mahal. Selain itu, jika Anda menyusun RelativeLayouts, Anda mendapatkan algoritme pengukuran eksponensial.

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

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

Pierre-Antoine LaFayette
sumber
8
Saya tahu ini adalah posting lama, tetapi apa yang Anda anggap sebagai solusi paling murah saat memilih antara relativelayout tunggal dan 2-3 linearlayouts?
Langkiller
5
A ConstraintLayout :)
moyheen
52

Kecuali Anda menata banyak Tampilan (misalnya dalam ListView), kinerja pemilihan antara LinearLayout atau RelativeLayout dapat diabaikan. Pilih mana yang paling nyaman digunakan untuk pekerjaan itu, dan khawatirkan kinerjanya hanya jika Anda perlu.

Dan inilah yang dikatakan oleh dokumen resmi tentang Membuat Tata Letak yang Efisien tentang kinerja RelativeLayout dan LinearLayout:

Tetap berpegang pada fitur-fitur dasar sayangnya bukan cara paling efisien untuk membuat antarmuka pengguna. Contoh umum adalah penyalahgunaan LinearLayout, yang menyebabkan bertambahnya tampilan dalam hierarki tampilan. Setiap tampilan - atau lebih buruk lagi, setiap pengelola tata letak - yang Anda tambahkan ke aplikasi Anda dikenai biaya: inisialisasi, tata letak, dan gambar menjadi lebih lambat. Tiket masuk tata letak bisa sangat mahal jika Anda menumpuk beberapa LinearLayout yang menggunakan parameter weight, yang mengharuskan anak diukur dua kali.

Lie Ryan
sumber
3
pembenaran untuk itu diabaikan? saya menemukan Ini yang menyatakan relativeLayout biaya lebih seperti i diduga bitbucket.org/spencerelliott/mercury/issue/1/...
max4ever
Hindari saja menambahkan wadah dalam.
Luis Pena
2

Relativelayout lebih efektif daripada Linearlayout.

Dari sini :

Ini adalah kesalahpahaman umum bahwa menggunakan struktur tata letak dasar mengarah ke tata letak yang paling efisien. Namun, setiap widget dan tata letak yang Anda tambahkan ke aplikasi Anda memerlukan inisialisasi, tata letak, dan gambar. Misalnya, menggunakan instance LinearLayout yang bertingkat dapat menyebabkan hierarki tampilan yang terlalu dalam. Selain itu, menumpuk beberapa instance LinearLayout yang menggunakan parameter layout_weight bisa sangat mahal karena setiap turunan perlu diukur dua kali. Ini sangat penting saat tata letak dinaikkan berulang kali, seperti saat digunakan dalam ListView atau GridView.

Nicholas Liu
sumber
2
@phreakhead Anda benar bahwa tidak ada satu solusi yang "benar". Itulah sebabnya solusi yang "benar" hampir selalu melupakan kinerja sepenuhnya dan melakukan apa pun yang paling mudah untuk ditulis dan dibaca.
Kevin Krumwiede
3
kutipan itu tidak mendukung pernyataan Anda, yang hanya benar dalam satu situasi
Flo We
Sebenarnya, rancang tata letak Anda selalu berusaha meminimalkan jumlah tingkat hierarki (tata letak di dalam tata letak dalam tata letak) dan periksa alat penampil hierarki untuk menemukan masalah potensial.
Alexander Haroldo da Rocha
1

PEMBARUAN 2018: Dalam rilis N Android, ConstraintLayoutkelas tersebut menyediakan fungsionalitas yang mirip dengan RelativeLayout, tetapi dengan biaya yang jauh lebih rendah. Ini adalah pengelola tata letak yang sangat kuat dan harus digunakan kapan pun diperlukan untuk membangun GUI yang kompleks.

akelec
sumber
sejak versi terbaru menjadi sangat lambat
Dragos Rachieru
Itu tergantung bagaimana itu digunakan. Anda harus menghindari pemosisian absolut dan menggunakan batasan.
akelec
-25

Anda dapat mencoba

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

Anda akan menemukan banyak perbedaan, jika Halaman Anda memuat beberapa gambar dari internet. Dalam hal ini LinearLayout 100% lebih baik daripada RelativeLayout.

TeeTracker
sumber