RelativeLayout แพงกว่า LinearLayout หรือไม่?


114

ฉันใช้ RelativeLayout มาโดยตลอดทุกครั้งที่ฉันต้องการ View container เพราะมันมีความยืดหยุ่นแม้ว่าฉันจะต้องการแสดงสิ่งที่เรียบง่ายจริงๆก็ตาม

สามารถทำได้หรือไม่หรือฉันควรลองใช้ LinearLayout เมื่อทำได้จากมุมมองด้านประสิทธิภาพ / แนวปฏิบัติที่ดี

ขอบคุณ!

คำตอบ:


149

ในการพูดคุยที่ Google I / O 2013 (การเขียนมุมมองที่กำหนดเองสำหรับ Android) Romain Guy ได้ชี้แจงความเข้าใจผิดที่ทำให้ทุกคนเริ่มใช้ RelativeLayouts สำหรับทุกสิ่ง RelativeLayout จะต้องทำการวัดสองรอบเสมอ โดยรวมแล้วจะไม่สำคัญตราบเท่าที่ลำดับชั้นมุมมองของคุณเรียบง่าย แต่ถ้าลำดับชั้นของคุณซับซ้อนการทำแบบวัดพิเศษอาจมีค่าใช้จ่ายสูงพอสมควร นอกจากนี้หากคุณซ้อน RelativeLayouts คุณจะได้รับอัลกอริทึมการวัดแบบเอ็กซ์โพเนนเชียล

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

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


8
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่สิ่งที่คุณคิดว่าจะเป็นวิธีแก้ปัญหาที่เสียค่าใช้จ่ายน้อยที่สุดเมื่อเลือกระหว่างการจัดวางแบบสัมพัทธ์เดียวกับ 2-3 linearlayouts
Langkiller

5
A ConstraintLayout :)
moyheen

52

เว้นแต่คุณจะวาง Views จำนวนมาก (เช่นใน ListView) ประสิทธิภาพของการเลือกระหว่าง LinearLayout หรือ RelativeLayout นั้นมีความสำคัญเล็กน้อย เลือกสิ่งที่สะดวกที่สุดในการใช้สำหรับงานและกังวลเกี่ยวกับประสิทธิภาพเมื่อคุณต้องการเท่านั้น

และนี่คือสิ่งที่เอกสารอย่างเป็นทางการเกี่ยวกับการสร้างเลย์เอาต์ที่มีประสิทธิภาพกล่าวเกี่ยวกับประสิทธิภาพของ RelativeLayout และ LinearLayout:

การยึดติดกับคุณสมบัติพื้นฐานนั้นไม่ใช่วิธีที่มีประสิทธิภาพสูงสุดในการสร้างอินเทอร์เฟซผู้ใช้ ตัวอย่างทั่วไปคือการใช้ LinearLayout ในทางที่ผิดซึ่งนำไปสู่การเพิ่มจำนวนการดูในลำดับชั้นของมุมมอง ทุกมุมมอง - หรือแย่กว่านั้นคือตัวจัดการเลย์เอาต์ทุกตัวที่คุณเพิ่มลงในแอปพลิเคชันของคุณมีค่าใช้จ่าย: การเริ่มต้นเค้าโครงและการวาดจะช้า เลย์เอาต์พาสอาจมีราคาแพงเป็นพิเศษเมื่อคุณซ้อน LinearLayout หลายตัวที่ใช้พารามิเตอร์น้ำหนักซึ่งจะต้องวัดเด็กสองครั้ง


3
เหตุผลที่มันเล็กน้อย? ฉันพบสิ่งนี้ซึ่งระบุว่า relativeLayout มีค่าใช้จ่ายมากกว่าเช่นเดียวกับที่ฉันสงสัยว่าbitbucket.org/spencerelliott/mercury/issue/1/…
max4ever

เพียงหลีกเลี่ยงการเพิ่มภาชนะภายใน
Luis Pena

2

Relativelayout มีประสิทธิภาพมากกว่า Linearlayout

จากที่นี่ :

เป็นความเข้าใจผิดทั่วไปที่ว่าการใช้โครงสร้างเค้าโครงพื้นฐานจะนำไปสู่รูปแบบที่มีประสิทธิภาพสูงสุด อย่างไรก็ตามแต่ละวิดเจ็ตและเลย์เอาต์ที่คุณเพิ่มลงในแอปพลิเคชันของคุณต้องมีการเตรียมใช้งานเค้าโครงและการวาดภาพ ตัวอย่างเช่นการใช้ LinearLayout อินสแตนซ์แบบซ้อนกันอาจทำให้เกิดลำดับชั้นมุมมองที่ลึกเกินไป นอกจากนี้การซ้อน LinearLayout หลายอินสแตนซ์ที่ใช้พารามิเตอร์ layout_weight อาจมีราคาแพงเป็นพิเศษเนื่องจากเด็กแต่ละคนต้องวัดสองครั้ง สิ่งนี้มีความสำคัญอย่างยิ่งเมื่อเค้าโครงสูงเกินจริงซ้ำ ๆ เช่นเมื่อใช้ใน ListView หรือ GridView


2
@phreakhead คุณคิดถูกแล้วที่ไม่มีวิธีแก้ปัญหาที่ "ถูกต้อง" แม้แต่คำเดียว ด้วยเหตุนี้วิธีแก้ปัญหาที่ "ถูกต้อง" จึงมักจะลืมเรื่องประสิทธิภาพไปโดยสิ้นเชิงและทำทุกอย่างที่ง่ายที่สุดในการเขียนและอ่าน
Kevin Krumwiede

3
คำพูดนั้นไม่ได้สำรองคำพูดของคุณซึ่งเป็นความจริงในสถานการณ์เดียวเท่านั้น
Flo We

ความจริงก็คือออกแบบเลย์เอาต์ของคุณโดยพยายามลดจำนวนระดับลำดับชั้นให้น้อยที่สุด (เค้าโครงภายในเค้าโครงภายในเค้าโครง) และตรวจสอบเครื่องมือดูลำดับชั้นเพื่อค้นหาปัญหาที่อาจเกิดขึ้น
Alexander Haroldo da Rocha

1

อัปเดต 2018:ในรุ่น N ของ Android ConstraintLayoutคลาสนี้มีฟังก์ชันการทำงานที่คล้ายกันRelativeLayoutแต่มีต้นทุนที่ต่ำกว่ามาก เป็นตัวจัดการเลย์เอาต์ที่มีประสิทธิภาพมากและควรใช้เมื่อใดก็ตามที่จำเป็นในการสร้าง GUI ที่ซับซ้อน


ตั้งแต่เวอร์ชันล่าสุดมันช้ามาก
Dragos Rachieru

ขึ้นอยู่กับว่าจะใช้อย่างไร คุณควรหลีกเลี่ยงการกำหนดตำแหน่งที่แน่นอนและใช้ข้อ จำกัด
akelec

-25

คุณสามารถลอง

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

คุณจะพบว่ามีหลายอย่างที่แตกต่างกันหากเพจของคุณโหลดรูปภาพจากอินเทอร์เน็ต ในกรณีนี้ LinearLayout ดีกว่า RelativeLayout 100% เลยทีเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.