android 배경 로딩 속도 향상

안드로이드 배경을 로딩하는데 시간이 오래 걸리는 경우 처리 방법


1. 레이아웃의 배경 삭제

2. 해당 레이아웃에 이미지뷰로 배경 추가

3. 매니페스트파일에 해당 액티비티에서 Theme.NoBackground 스타일 추가

4. styles.xml 작성 (Theme.NoBackground 스타일 추가)


<< 실제 반영 예 >>

aaa파일의 레이아웃 소스(layout/aaa.xml)

렐러티브 레이아웃이나 리니어 레이아웃에 있던 배경을 삭제하고, ImageView 추가


    

 
 
 


매니페스트 파일(AndroidManifest.xml)


    
        
            
                
                
            
        



values/styles.xml




        

 
 


출처: http://samse.tistory.com/168


일부 안드로이드 어플리케이션들은 UI toolkit 뛰어넘는 성능을 요구되며 그렇게 하기 위한  가지 방법이 있다 문서에서 당신은 그리기와 액티비티가 화면에 보여지는 시간을 빠르게 하는 방법을 발견하게 될것이다 두가지 기술은 모두 윈도우의 백그라운드 그리기(window’s background drawable) 특성에 기인한다.

Window background 다소 오해하게 하는 용어이다당신이 setContentView() Activity에서 호출하여 UI 설정하면 안드로이드는 Activity 윈도우에 당신의 뷰를 추가한다하지만  윈도우에는 당신이 추가한 뷰만 있는 것이 아니다여기서 가장 중요한  하나는 뷰구조의 가장 상위에는 DecorView 있다는 것이다.

A typical Android view hierarchy

DecorView 실제로 윈도우의 background drawable 가지고 있는 뷰이다당신의 액티비티에서 getWindow().setBackgroundDrawable() 호출함으로써 DecorView background drawable 변경하게 된다이는 현재 구현된 안드로이드에 아주 국한된 내용이며 향후 버전이나 디바이스에서 변경될수 있다.

당신이 표준안드로이드 테마를 사용한다면 디폴트 background drawable 당신의 액티비티에 셋팅된다. T-Mobile G1에서 현재 ColorDrawable 사용되고 있다대부분의 애플리케이션에서  이미지는  동작하고 남겨진다이는 반대로 당신의 어플리케이션에 그리기 성능에 영향을 줄수 있다항상 전체화면에 불투명한 그림을 그리는 예제가 있다.

An opaque user interface doesn't need a window background 

 그림은 ImageView 의해 커버되는 윈도우의 배경이 없는 스크린샷이다 애플리케이션은 최대한 빠르게 다시그리기를 하도록 구현되었다. 44 fps 속도로 그려지고 있다이와 같이 속도를 개선하기 위한 쉬운방법은 background drawable 제거하는것이다. UI 불투명하기 때문에 배경을 그리는 것은 낭비적이다따라서 배경의 제거는 성능향상에 효과적이다.

Remove the background for faster drawing

새버전의 애플리케이션은 51fps까지 향상되었다 개선된 차이는 T-Mobile G1 메모리버스의 속도 향상으로 쉽게 설명된다.

커스텀테마를 사용하여 배경을 제거하는 것을 쉽게   있다먼저 res/values/themes.xml 만들고 아래와 같이 내용을 추가하라.

<resources>
    
<style name="Theme.NoBackground" parent="android:Theme">
        
<item name="android:windowBackground">@null</item>
    
</style>
</resources>

그러고   android:theme=”@style/Theme.NoBackground”속성을 당신의 <activity/> <application/>테그에 추가하면 된다 크릭은 MapView, WebView fullscreen 사용하는 어플에서 많이 사용된다.

불투명 뷰와 안드로이드 :  최적화방식은 안드로이드 UI툴킷이 현재 불투명한 자식뷰들에 의해 숨겨진 뷰의 그리기에 대해 충분히 스마트하지 않기 때문에 필요하다이런 최적화가 구현되지 않은 주된 이유는 간단하다 안드로이드 애플리케이션내에서 불투명한 뷰는 아주 조금 사용되기 때문이다.

윈도우 배경을 변경하기 위해 테마를 사용하는 것은 액티비티의 시작을 인지하는 성능을 개선하기 위한 최고의 방법이다 트릭은 커스텀 백그라운드(texture logo) 사용하는 액티비티에만 적용이 가능하다. Shelves애플리케이션이 좋은 예제가 된다.

Textured backgrounds are good candidates for window's background

 애플리케이션시 나무느낌배경을 XML이나 onCreate에서 설정하면 사용자는 어두운 배경이나 디폴트테마를 가지고 시작될것이다나무느낌배경은 콘텐트뷰의 inflation이후에 표시될것이며첫번째 layout/drawing 수행될것이다이것은 부작용을 야기하고 애플리케이션이 로드되는데 시간이 걸린다는 느낌을 받게 될것이다.

반면에 애플리케이션이 테마에 나무느낌배경을 정의하면 애플리케이션이 시작되자마자 시스템에 의해 로드된다사용자는 디폴트테마를 절대로 볼수 없으며 애플리케이션이 로드중이라는 느낌도 받지 않을것이다메모리와 디스크의 사용을 제한하기 위해 res/drawable/background_shelf.xml 정의되어 연결된다:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    
android:src="@drawable/shelf_panel"
    
android:tileMode="repeat" />

 drawable 테마에서 참조된다.

<resources>
    
<style name="Theme.Shelves" parent="android:Theme">
        
<item name="android:windowBackground">@drawable/background_shelf</item>
        
<item name="android:windowNoTitle">true</item>
    
</style>
</resources>

동일한 트릭이 T-Mobile G1 탑재된 Google Map애플리케이션에도 사용되었다애플리케이션이 적재되면 MapView tile로딩되는 것을 바로 볼수 있다.

때때로 최고의 트릭은 또한 최고로 단순한것이다따라서 당신이 불투명한 UI 커스텀배경을 사용하는 액티비티를 만들어야  윈도우배경을 변경해야 함을 기억하라.

Download the source code of the first example.

Download the source code of Shelves.

 



+ Recent posts