RelativeLayout có đắt hơn LinearLayout không?


114

Tôi luôn sử dụng RelativeLayout mỗi khi tôi cần một View container, vì nó linh hoạt, ngay cả khi tôi chỉ muốn hiển thị một cái gì đó thực sự đơn giản.

Làm như vậy có được không hay tôi nên thử sử dụng LinearLayout khi có thể, từ quan điểm hiệu suất / phương pháp hay?

Cảm ơn!

Câu trả lời:


149

Trong một buổi nói chuyện tại Google I / O 2013 (Viết Chế độ xem tùy chỉnh cho Android), Romain Guy đã giải thích sự hiểu lầm khiến mọi người bắt đầu sử dụng RelativeLayouts cho mọi thứ. Một RelativeLayout luôn phải thực hiện hai lần đo. Nhìn chung, nó không đáng kể miễn là phân cấp chế độ xem của bạn đơn giản. Nhưng nếu hệ thống phân cấp của bạn phức tạp, việc vượt qua các biện pháp bổ sung có thể khá tốn kém. Ngoài ra, nếu bạn lồng RelativeLayouts, bạn sẽ nhận được một thuật toán đo lường theo cấp số nhân.

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

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


8
Tôi biết đây là một bài viết cũ, nhưng bạn sẽ coi giải pháp nào là giải pháp ít tốn kém nhất khi lựa chọn giữa một kết quả tương đối duy nhất và 2-3 giải pháp tuyến tính?
Langkiller

5
A ConstraintLayout :)
moyheen

52

Trừ khi bạn đang đặt nhiều Chế độ xem (ví dụ: trong một ListView), hiệu suất của việc lựa chọn giữa LinearLayout hoặc RelativeLayout là không đáng kể. Chọn bất kỳ cái nào thuận tiện nhất để sử dụng cho công việc và chỉ lo lắng về hiệu suất khi bạn cần.

Và đây là những gì tài liệu chính thức về Tạo bố cục hiệu quả nói về hiệu suất của RelativeLayout và LinearLayout:

Rất tiếc, bám vào các tính năng cơ bản không phải là cách hiệu quả nhất để tạo giao diện người dùng. Một ví dụ phổ biến là việc lạm dụng LinearLayout, dẫn đến sự gia tăng số lượt xem trong hệ thống phân cấp chế độ xem. Mọi chế độ xem - hoặc tệ hơn, mọi trình quản lý bố cục - mà bạn thêm vào ứng dụng của mình đều phải trả giá: khởi tạo, bố cục và vẽ trở nên chậm hơn. Thẻ bố trí có thể đặc biệt đắt tiền khi bạn lồng một số LinearLayout sử dụng tham số trọng số, yêu cầu con được đo hai lần.


3
sự biện minh cho nó là không đáng kể? Tôi thấy điều này trong đó nêu RelativeLayout chi phí chỉ hơn như tôi nghi ngờ bitbucket.org/spencerelliott/mercury/issue/1/...
max4ever

Chỉ cần tránh thêm các thùng chứa bên trong.
Luis Pena

2

Relativelayout hiệu quả hơn Linearlayout.

Từ đây :

Một quan niệm sai lầm phổ biến rằng việc sử dụng các cấu trúc bố cục cơ bản dẫn đến bố cục hiệu quả nhất. Tuy nhiên, mỗi tiện ích con và bố cục bạn thêm vào ứng dụng của mình yêu cầu khởi tạo, bố cục và vẽ. Ví dụ: sử dụng các phiên bản LinearLayout lồng nhau có thể dẫn đến phân cấp chế độ xem quá sâu. Hơn nữa, lồng một số trường hợp của LinearLayout sử dụng tham số layout_weight có thể đặc biệt tốn kém vì mỗi con cần được đo hai lần. Điều này đặc biệt quan trọng khi bố cục được thổi phồng nhiều lần, chẳng hạn như khi được sử dụng trong ListView hoặc GridView.


2
@phreakhead Bạn nói đúng rằng không có giải pháp duy nhất "đúng". Đó là lý do tại sao giải pháp "đúng" là hầu như luôn luôn quên đi hiệu suất hoàn toàn và làm bất cứ điều gì dễ dàng nhất để viết và đọc.
Kevin Krumwiede

3
câu trích dẫn đó không hỗ trợ tuyên bố của bạn, điều này chỉ đúng trong một tình huống
Flo Chúng tôi

Sự thật thực sự là thiết kế bố cục của bạn luôn cố gắng giảm thiểu số lượng cấp độ phân cấp (bố cục bên trong bố cục bên trong bố cục) và kiểm tra công cụ xem phân cấp để tìm ra các vấn đề tiềm ẩn.
Alexander Haroldo da Rocha

1

CẬP NHẬT 2018: Trong bản phát hành N của Android, ConstraintLayoutlớp này cung cấp chức năng tương tự RelativeLayoutnhưng với chi phí thấp hơn đáng kể. Nó là trình quản lý bố cục rất mạnh mẽ và nó nên được sử dụng bất cứ khi nào cần thiết để xây dựng một GUI phức tạp.


kể từ khi phiên bản mới nhất của nó trở nên rất rất chậm
Dragos Rachieru

Nó phụ thuộc vào cách nó được sử dụng. Bạn nên tránh tuyệt đối các ràng buộc về định vị và sử dụng.
akelec

-25

Bạn co thể thử

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

Bạn sẽ thấy rằng có rất nhiều khác biệt, nếu Trang của bạn tải một số hình ảnh từ internet. Trong trường hợp này, LinearLayout tốt hơn 100% so với RelativeLayout.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.