Window 

window는 불투명 사각형이다. application은 window manager에 요청해서 window를 얻을수 있다. 각 window는 하나의 surface를 가진다. application은 주어진 surface에 자기 원하는 것을 자유롭게 그릴수 있다.

Surface

surface는 screen을 구성할 pixel들을 가지고 있는 obj이다. 각각의 window (dialog, status bar, 개발자가 만든 full screen activity)는 각자의 surface를 가지고 있다. 보통 surface는 하나이상의 buffer를 가진다.(보통은 두개) 두개의 buffer를 가지고 있는 경우 SurfaceFliger가 현재화면을 조합해서 만드는 동안 다음 화면에 그려질 화면 모양을 예비 buffer에 보관함으로써 다음 화면 출력을 대비하게 된다.

SurfaceFlinger

SurfaceFlinger는 각각의 surface들를 최종적으로 올바른 z-order따라 합쳐그린다.

View

view는 window안에 있는 interactive UI element이다. window는 하나의 view hierarchy를 가진다. 언제든 window가 다시 그려져야 한다면 (예를 들어 어떤 view가 invalidate된 경우) surface는 locked 되고 canvas를 return한다. hierarchy를 따라 canvas는 각각의 view를 거치게 된다. view들은 각자 순서에 각자 필요한 부분을 canvas에 그리게 된다. (정확히 말하면 canvas를 이용해서 surface에 연결된 bitmap에 그린다.) 이 과정을 마치면 surface를 unlocked 그리고 posted 된다. 이렇게 완성된 buffer는 foreground와 swap되고 SurfaceFlinger에 의해 조합되서 출력된다. 

Bitmap

pixel data에 대한 interface이다. 여기서 말하는 pixel data는 Bitmap 자신이 가지고 있는 pixel data인 경우도 있지만 Bitmap가 가지고 있지 않는 다른 pixel data일수도 있다. drawing을 위해 surface와 canvas가 내부적을 연결된 경우가 그 예가 될수 있다.  (canvas는 surface에 직접 그리지 않는다. canvas는 bitmap 이나 open GL container에 그린다. bitmap이 만들어지고 current drawing buffer of the Surface에 연결되면 canvas는 bitmap에 그리게 된다.)

Comments are closed.

Post Navigation