RelativeLayout이 LinearLayout보다 비쌉니까?


114

저는 뷰 컨테이너가 필요할 때마다 항상 RelativeLayout을 사용했습니다. 유연성 때문에 정말 단순한 것을 표시하고 싶었더라도.

그렇게해도 괜찮습니까? 아니면 성능 / 우수 사례 관점에서 가능한 한 LinearLayout을 사용해보아야합니까?

감사!

답변:


149

Romain Guy는 Google I / O 2013 (Android 용 사용자 정의보기 작성)에서 모든 사람이 모든 작업에 RelativeLayouts를 사용하게 된 오해를 명확히했습니다. RelativeLayout은 항상 두 번의 측정 패스를 수행해야합니다. 전체적으로보기 계층 구조가 단순한 한 무시해도됩니다. 그러나 계층 구조가 복잡한 경우 추가 측정 단계를 수행하면 잠재적으로 상당한 비용이 발생할 수 있습니다. 또한 RelativeLayouts를 중첩하면 지수 측정 알고리즘을 얻게됩니다.

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

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


8
나는 이것이 오래된 게시물이라는 것을 알고 있지만 단일 상대 레이아웃과 2-3 개의 선형 레이아웃 중에서 선택할 때 가장 비용이 적게 드는 솔루션이라고 생각하십니까?
Langkiller 2011

5
ConstraintLayout :)
moyheen 2017 년

52

많은 뷰를 레이아웃하지 않는 한 (예 : ListView에서) LinearLayout 또는 RelativeLayout 중에서 선택하는 성능은 무시할 수 있습니다. 작업에 가장 편리한 것을 선택하고 필요할 때만 성능에 대해 걱정하십시오.

다음은 효율적인 레이아웃 만들기 에 대한 공식 문서 가 RelativeLayout 및 LinearLayout의 성능에 대해 말하는 내용입니다.

기본 기능을 고수하는 것은 안타깝게도 사용자 인터페이스를 만드는 가장 효율적인 방법이 아닙니다. 일반적인 예는 LinearLayout의 남용으로 뷰 계층 구조에서 뷰가 급증하는 경우입니다. 애플리케이션에 추가하는 모든보기 또는 더 나쁜 경우에는 모든 레이아웃 관리자에 비용이 발생합니다. 초기화, 레이아웃 및 그리기 속도가 느려집니다. 레이아웃 패스는 가중치 매개 변수를 사용하는 여러 LinearLayout을 중첩 할 때 특히 비용이 많이들 수 있습니다.이 경우 하위 항목을 두 번 측정해야합니다.


3
무시할만한 정당성? 나는이 RelativeLayout의보다 그냥 내가 의심으로 비용이 어떤 상태 발견 bitbucket.org/spencerelliott/mercury/issue/1/...
max4ever

내부 용기를 추가하지 마십시오.
Luis Pena

2

Relativelayout은 Linearlayout보다 더 효과적입니다.

에서 여기 :

기본 레이아웃 구조를 사용하면 가장 효율적인 레이아웃이된다는 것은 일반적인 오해입니다. 그러나 애플리케이션에 추가하는 각 위젯 및 레이아웃에는 초기화, 레이아웃 및 그리기가 필요합니다. 예를 들어, LinearLayout의 중첩 된 인스턴스를 사용하면 뷰 계층 구조가 지나치게 깊어 질 수 있습니다. 또한 layout_weight 매개 변수를 사용하는 LinearLayout의 여러 인스턴스를 중첩하면 각 하위 항목을 두 번 측정해야하므로 비용이 많이들 수 있습니다. 이것은 ListView 또는 GridView에서 사용되는 경우와 같이 레이아웃이 반복적으로 확장 될 때 특히 중요합니다.


2
@phreakhead 하나의 "올바른"해결책이 없다는 것이 맞습니다. 그렇기 때문에 "올바른"솔루션은 거의 항상 성능을 완전히 잊고 쓰기와 읽기가 가장 쉬운 일을하는 것입니다.
Kevin Krumwiede 2015 년

3
그 인용문은 귀하의 진술을 뒷받침하지 않습니다. 이는 한 가지 상황에서만 사실입니다
Flo We

실제로는 항상 계층 구조 수준 (레이아웃 내부 레이아웃 내부 레이아웃)을 최소화하려고 레이아웃을 디자인하고 잠재적 인 문제를 찾기 위해 계층 뷰어 도구를 확인하십시오.
Alexander Haroldo da Rocha

1

2018 업데이트 : Android N 릴리스에서이 ConstraintLayout클래스는와 유사한 기능을 제공 RelativeLayout하지만 훨씬 더 저렴한 비용으로 제공됩니다. 매우 강력한 레이아웃 관리자이며 복잡한 GUI를 구축해야 할 때마다 사용해야합니다.


최신 버전 이후 매우 매우 느린되었다
드라고 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.