티스토리 뷰
레이아웃 구조 최적화
목차 1. 레이아웃 계층 구조 최적화 2. 레이아웃 재사용 3.중첩 layout Performance
1. 레이아웃 계층 구조 최적화
중첩된 LinearLayout을 사용하게 되면 View 계층 구조가 굉장히 깊어지게 됨
그렇기 때문에 레이아웃을 조사하고 최적화 하는 방법이 필요함
(1) Layout Inspector(Hierachy View Android 3.1 미만만 가능) (2) 린트
Layout Inspector
1) App 실행
2) Layout Inspector 사용 -> 앱 레이아웃을 디자인 모형과 비교하고 앱의 확대 뷰 또는 3D 뷰를 표시하며 런타임에 앱 레이아웃의 세부정보를 검토 가능
- UI에 관한 포괄적이고 유용한 정보를 실시간으로 확인
- 다양한 기기 및 디스플레이 구성의 레이아웃을 동시에 미리 볼 수 있는 시각적 도구
- 프로세스 초기에 레이아웃의 문제를 포착 가능
Lint(린트)
- Lint(린트) 도구를 사용하여 뷰 계층 구조 최적화 가능
- Lint 실행방법? Analyze -> Inspect Code
Lint(린트)란?
테스트를 빌드하여 앱이 기능적 요구사항을 충족하는지 확인하는 것 외에도 린트를 통해 코드를 실행하여 코드에 구조적 문제가 없는지 확인하는 것이 중요, 린트 도구를 사용하면 구조적 문제로 인해 Android 앱의 안정성과 효율성에 영향을 미치거나 코드 관리에 지장을 줄 가능성이 있는 코드를 찾을 수 있음
Android 프로젝트 소스 파일을 검사하여 잠재적 버그를 찾아내고 정확성, 보안, 성능, 사용성, 접근성, 국제화 등을 최적화
Lint(린트) 규칙
- 복합 드로어블 사용 - ImageView와 TextView가 포함된 LinearLayout은 복합 드로어블로 더 효율적으로 처리할 수 있음
- 루트 프레임 병합 - FrameLayout이 레이아웃의 루트이고 백그라운드나 패딩 등을 제공하지 않는다면 좀 더 효율적인 병합 태그로 바꿀 수 있음
- 쓸모없는 리프 - 하위 요소나 백그라운드가 없는 레이아웃은 더 평평하고 효율적인 레이아웃 계층 구조를 위해 종종 삭제될 수 있음(표시되지 않기 때문).
- 쓸모없는 상위 요소 - 동위 요소가 없고 ScrollView 또는 루트 레이아웃이 아니며 백그라운드도 없는 하위 요소가 있는 레이아웃은 더 평평하고 효율적인 레이아웃 계층 구조를 위해 삭제하고 하위 요소를 상위 요소로 직접 이동 할 수 있음
- 깊은 레이아웃 - 너무 많이 중첩된 레이아웃은 성능에 좋지 않습니다. RelativeLayout 또는 GridLayout과 같이 더 평평한 레이아웃을 사용하여 성능을 개선해보세요. 기본 최대 깊이는 10.
2. 레이아웃 재사용
- 전체 레이아웃을 효율적으로 재사용하려면 <include/> 및 <merge/> 태그를 사용
- 다른 레이아웃을 현재 레이아웃 내에 삽입
(1) <include/>
(2) <merge/>
- include 쓰려면 반드시 감싸줄 View Group 존재 필요하기 때문에 뷰 계층을 깊게 하여 부하 가중시킴
- 즉, 레이아웃을 그릴 때 depth 가 깊어 질수록 성능은 저하됨
- 그렇기 때문에 merge 태그를 씀 , 단점은 view 그룹을 생성하지 않기 때문에 id 도 날아감, inlcude 사용 시 불필요하게 사용되는 root view group 을 제거할 때 쓰인
3. 중첩 layout 대신 Constrian Layout 을 사용하여 최적화?
좋은글[번역문] ConstraintLayout의 성능 이점에 대한 이해 -> abandonia.tistory.com/1
원본 -> android-developers.googleblog.com/2017/08/understanding-performance-benefits-of.html
요약 -> 전통적인 중첩 layout을 그리는 것보다 Constraint Layout 을 쓰는게 좋다 .
systrace라는 도구를 사용하여 성능을 비교해보니 전통적인 View보다는 Constraint Layout을 쓰는게 더 좋은 성능을 보였음 systrace 성능 분석 도구 사용 방법
<출처>
1. developer.android.com/training/improving-layouts/optimizing-layout?hl=ko
3. medium.com/@ggikko/optimize-view-hierarchy-ab3054d8fbe6
4. sites.google.com/site/endihom/home/programming-language/android/article/layout-tricks-reuse
8. stackoverflow.com/questions/5632114/how-to-include-layout-inside-layout/22972322
9. www.youtube.com/watch?v=b0gNkXdUfl0
academy.realm.io/kr/posts/tools-and-libraries-for-common-android-problems/불러오는 중입니다...
'Programming > Android' 카테고리의 다른 글
[Android] 메모리관리 memory leak (0) | 2021.01.05 |
---|---|
[Android/Jetpack] Android Jetpack 정의 (0) | 2020.12.22 |
[Android] Context (0) | 2020.12.03 |
[Android] FireBase Database 사용하기 (0) | 2020.12.02 |
[Android] FireBase 시작하기 (0) | 2020.12.02 |