5월, 2017의 게시물 표시

[Android] Layout별 성능 비교[Measure 호출횟수 비교] (LinearLayout vs RelativeLayout vs ConstraintLayout)

이미지
UI 구성시 가장 기본이 되는 것은 Layout이다. 이 Layout들 중, 가장 많이 쓰게 되는 것이, LinearLayout과 RelativeLayout이 아닐까 한다. 최근들어 ConstraintLayout에 대해 검토를 하는 사람들이 늘어나게 되었고, Google에서도 성능상의 이점들을 이야기하며, ConstraintLayout의 사용을 권장하고 있다. 
 그렇다면, 정말로 ConstraintLayout이 다른 Layout들에 비해 얼마나 좋은지 확인해보려고 한다. 그 비교의 첫번째로, Measure 호출 횟수를 비교해보려고 한다. 
  물론 UI성능을 확인하는데는 Measure뿐 아니라, 기타 다른 UI들이  

 본격 비교를 하기에 앞서서, 기존에 사용하고 있던 Layout들이 어떤 패턴으로 measure동작을 수행하는지 알아보려고 한다.
 기본적으로 Measure는 자기 자신의 Measure를 수행할 때 필요한 모든 정보가 충족되지 않으면, 필요한 정보를 모두 얻을 수 있을때까지,  Child들의 Measure를 다시 타게 된다. 

※ 기본 Layout들의 Measure 호출 패턴

  1. LinearLayout


   Test 1. LinearLayout 1단 구성


   간단한 예제로, Layout내부에 두개의 TextView를 포함한 구조를 만들었다.
   위와 같은 XML구성일 때, Measure() 호출 스택은 아래와 같다.

    1) LinearLayout.onMeasure()
    2) TextView1.onMeasure()
    3) TextView2.onMeasure()
  --------------------------------------
    4) LinearLayout.onMeasure()
    5) TextView1.onMeasure()
    6) TextView2.onMeasure()

    위의 스택을 보면 알 수 있듯 LinearLayout의 Measure는 두단계로 진행된다. 
    가운데 구분선은, 단계의 구분을 해둔 것이다.
    …