본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Launch UX Improvement.

by 돼지왕 왕돼지 2014. 4. 4.
반응형


 [android] Launch UX Improvement.

 


[android] Launch UX Improvement.


reference : http://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/


Summary


안드로이드는 activity theme 에 따라 view 가 완전히 불러지기 전에 preview window 를 보여준다.

이 때 theme 을 제대로 control 하지 않으면 이상한 전환 현상을 보여주기 때문에 부자연스럽다.


이를 개선하기 위해서 첫번째로..

actionbar 를 사용하지 않으면 이를 제거해주자.

theme 의 parent 를 android:Theme.Holo.NoActionBar 를 주면 된다.


두번째로는 

배경화면을 기본 시작화면 색깔과 맞추는 것이 좋다.

그렇다고 Splash Screen 을 이곳에 쓰지 말자.

이럴 경우 screen orientation change 와 같은 경우로 activity 가 다시 create 될 경우 의도치 않은 splash 화면을 볼 수도 있다.




Android App Launching 에 대한 이야기.


새로운 앱을 실행시키면, Dalvik VM 에 새로운 process 를 생성하고 초기화 시킨다.

그 다음 Dalvik 은 main thread 를 불러서 코드를 실행시키기 시작한다.

최초 process 를 초기화시키는 작업은 많은 시간을 소비한다. 그래서 Zygote 라는 트릭에 의존한다.

Zygote 의 trick 은 class, drawable, colorstatelist 등을 먼저 로드해서, 프로세스 초기화가 끝날 때까지 사용한다.


이 자이고트는 메모리 사용량도 줄여주고, 새로운 프로세스 시작 시간도 줄여준다.

비록 하드웨어와 소프트웨어의 발전으로 로딩속도는 매우 빨라졌지만,

그래도 딸꾹질 하듯 확 화면이 전환되는 현상을 아직 피하기는 어렵다.

그래서 "starting window" 라고 불리는 임시 윈도우를 preview window 의 개념으로 보여준다.


starting window 는 TYPE_APPLICATION_STARTING 으로 분리되는 window 로 focus 도 받을 수 없고, touchable 하지도 않다.

android.intent.category.LAUNCHER 로 표기된 카테고리 아이들만 이 starting window 를 보여준다.

그리고 activity 를 restoring 하는 과정에서도 보여진다. ( 그래서 splash screen 을 사용해서는 안된다. )


starting window 는 theme 에 의존하는 decor view 를 기본으로 보여주며,

만약 theme 이 정의되어 있지 않으면 empty decor view 를 보여준다.







완전한 preview window.


android:windowDisablePreview="true" 를 설정하면, preview window 를 보여주지 않는다.

하지만 이 방법은 그리 좋지 않다. 프로세스가 초기화 되는 동안에 대한 대응이 없어 UX 가 좋지 못하다.

이것은 보통 Open GL ES 등을 사용하는 게임에서만 사용하면 좋은 옵션이다.


먼저 Actionbar 를 사용하지 않는다면, 제거해주자.

android:Theme.Holo.NoActionBar 을 이용하면 된다.


preview window 에 너무 의지하기 보다는 draw overload 를 줄이는 것도 중요하다.

"Show GPU overdraw" option 을 이용하여 overdrawing 되는 것을 가능한한 줄이는 것도 중요하다.


그리고 background color 를 맞추어 가는 것이 좋고,

background 를 지정하지 않으려면 getWindow().setBackgroundDrawable( null ); 을 설정하는 것이 좋다.






반응형

댓글