[android] VSYNC & Choreographer - Butter Project |
http://developer.android.com/reference/android/view/Choreographer.html
Choreographer - 발레 안무가
-
API 16 ( Jelly Bean ) 부터 사용 가능하다.
-
animation, input 그리고 drawing timing 을 coordinate 한다.
-
choreographer 는 VSYNC pulse 타이밍에 event 를 받는다.
그리고 이 시간에 다음 display frame 에 대한 작업을 하면 된다.
-
앱은 일반적으로 choreographer 와 간접적으로 작용한다.
animation framework 나 view hierarchy 를 통해서 접근한다.
이 접근하는 것들은 다음과 같은 API 를 통해 한다.
ValueAnimator.start
View.postOnAnimation / View.postOnAnimationDelayed
postInvalidateOnAnimation
onDraw // 이 녀석은 자연스럽게 VSYNC 타이밍에 불리게 된다.
-
GL thread 에서 rendering 한다던지, animation framework 나 view hierarchy 를 사용하지 않고 animation 을 할 경우에는
Choreographer.postFrameCallback(Choreographer.FrameCallback) 을 사용하면 된다.
-
각각의 Looper thread 는 각각의 choreographer 를 가지고 있다.
-
Choreographer 는 thread local 한 singleton 이다.
-
Choreographer.FrameCallback callback = new Choreographer.FrameCallback(){
public void doFrame(long frameTime){
render( frameTime );
}
};
Choreographer c = Choreographer.getInstance();
c.postFrameCallback(callback);
-
효과적인 drawing 을 위해 invalidate() 대신 invalidate( l, t, r, b ) 을 통해 범위를 지정해주는 것이 좋다.
-
View 의 animation 시 view 자체의 redraw 가 불필요한 경우에는 아래와 같이 해주는 것이 좋다.
View.setLayerType(View.LAYER_TYPE_HARDWARE, null);
위와 같이 하면 GPU 쪽에서 이 녀석의 bitmap ( 혹은 texture ) 를 떠서 이 녀석을 가지고 animation 을 한다.
반대로 animation 을 하면서 view 자체가 변형되는 경우에는 이 녀석을 꺼주는 것이 더 좋다.
매번 다시 bitmap 을 뜨기 때문이다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Tinting drawables (0) | 2017.09.15 |
---|---|
[android] 배경 딤처리하기 (0) | 2017.09.06 |
[android] MOS 에서는 ACTION_IMAGE_CAPTURE 에도 Camera permission 이 필요하다. (0) | 2017.09.04 |
[android] compileSdk 를 올린 후에 provider permission denied 에러가 나면..? (0) | 2017.08.29 |
[android] targetSdk, compileSdk 수정 후 - :app:dexDebug ExecException finished with non-zero exit value 1 에러가 나면.. (0) | 2017.08.28 |
댓글