출처 : 안드로이드 개발자 article
Android LayoutTricks #1 (성능개선)
Android Layout Tricks #2 : Reusing Layouts ( 성능개선 )
Android Layout Tricks #4 : Optimize with stubs ( 성능 최적화 )
Window Backgrounds & UI Speed
Android Layout Tricks #3 : Optimize by merging
- 여기서는 <merge /> 태그에 대해 다룬다.
- <merge /> 태그는 view tree 의 level 을 줄여서 android layouting 을 최적화시킬 수 있다.
- Title bar 가 있는 경우 기본 View tree 는 다음과 같이 구성된다.
- 빨간박스가 Title bar 쪽이고 왼쪽 FrameLayout 으로 시작되는 부분이 실제 우리가 구성하는 View 가 들어가는 Layout 쪽이다. 만약 당신이 정의한 Activity layout 의 root가 FrameLayout 이고, 화면은 가로 세로 모두 match_parent 를 사용하며, 다른 background, padding, gravity 등을 사용하지 않는다면, 해당 root FrameLayout 은 전혀 쓸모 없는 녀석인데도 view tree 를 구성하게 된다. 이 경우 view hierarchy 의 level 이 1 증가되는 현상은 물론 view 가 하나 더 추가되는 overhead 가 생긴다.
- 위와 같은 경우 <merge /> 태그를 활용하여 view tree level을 한 단계를 줄일 수 있다. <merge /> 태그를 사용하면, LayoutInflater 가 이 태그를 맞딱뜨렸을 때 merge 태그 안에 있는 녀석을 add 하고, merge 자체는 view 로 add 하지 않는다.
- <merge /> 태그는 <include /> 태그와 함께 사용하여 좋은 시너지 효과를 낼 수도 있고, <merge /> 태그 자체도 composite view 를 만들 때 유용하게 사용될 수 있다.
public class OkCancelBar extends LinearLayout {
public OkCancelBar(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);
}
}
- Custom widget 을 만들 때 위와 같이 ViewGroup 을 extends 한 녀석을 사용하곤 하는데, 이럴 경우 xml 을 정의할 때 <merge /> 를 사용하면 좋다. 이 때(merge 를 사용한 경우) inflate 인자인, attachToRoot 항목이 true 가 되어야 한다.
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<include
layout="@layout/okcancelbar_button"
android:id="@+id/okcancelbar_ok" />
<include
layout="@layout/okcancelbar_button"
android:id="@+id/okcancelbar_cancel" />
</merge>
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Window Backgrounds & UI Speed (0) | 2012.11.28 |
---|---|
[android] Android Layout Tricks #4 : Optimize with stubs ( 성능 최적화 ) (0) | 2012.11.28 |
[android] Android Layout Tricks #2 : Reusing Layouts ( 성능개선 ) (0) | 2012.11.28 |
[android] Android LayoutTricks #1 (성능개선) (0) | 2012.11.28 |
[android] decompile ( 디컴파일 ) 하는 방법 (6) | 2012.11.27 |
댓글