21
2009 4Korea Android 세미나 Android Window and View System www kandroid org 운영자 : 양정수 (yangjeongsoo@gmail com) 2009. 10. 23. www.kandroid.org 운영자 : 양정수 (yangjeongsoo@gmail.com)

Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

2009 제4회 Korea Android 세미나

Android Window and View System

www kandroid org 운영자 : 양정수 (yangjeongsoo@gmail com)

2009. 10. 23.

www.kandroid.org 운영자 : 양정수 ([email protected])

Page 2: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

목 차

Overview

Basic

Ad dAdvanced

ArchitectureArchitecture

Page 3: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Overview : Android Platform Stack vs. View/Window System

AA PPL I CAT IONSPPL I CAT IONS

HomeHomeAlarmAlarmCameraCameraBrowserBrowserIMIMSMS/MMSSMS/MMSDialerDialerAlarmAlarm

AA PPL I CAT IONSPPL I CAT IONS

HomeHomeHomeHomeAlarmAlarmAlarmAlarmCameraCameraCameraCameraBrowserBrowserBrowserBrowserIMIMIMIMSMS/MMSSMS/MMSSMS/MMSSMS/MMSDialerDialerDialerDialerAlarmAlarmAlarmAlarm

……ClockClockAlbumsAlbumsMedia PlayerMedia PlayerCalendarCalendarEmailEmailVoice DialVoice DialContactsContacts

AA PPL I CAT IONPPL I CAT ION FF RAMEWORKRAMEWORK

ActivityActivityManagerManager

WindowWindowManagerManager

ContentContentProviderProvider

ViewViewSystemSystem

NotificationNotificationManagerManager

…………ClockClockClockClockAlbumsAlbumsAlbumsAlbumsMedia PlayerMedia PlayerMedia PlayerMedia PlayerCalendarCalendarCalendarCalendarEmailEmailEmailEmailVoice DialVoice DialVoice DialVoice DialContactsContactsContactsContacts

AA PPL I CAT IONPPL I CAT ION FF RAMEWORKRAMEWORK

ActivityActivityManagerManagerActivityActivityManagerManager

WindowWindowManagerManagerWindowWindowManagerManager

ContentContentProviderProviderContentContentProviderProvider

ViewViewSystemSystemViewView

SystemSystemNotificationNotification

ManagerManagerNotificationNotification

ManagerManagerManagerManager

PackagePackageManagerManager

ManagerManager

TelephonyTelephonyManagerManager

ProviderProvider

ResourceResourceManagerManager

SystemSystem

LocationLocationManagerManager

ManagerManager

……

LL IBRAR I E SI BRAR I E S AA NDRO IDNDRO ID RRUNT IMEUNT IME

ManagerManagerManagerManager

PackagePackageManagerManagerPackagePackageManagerManager

ManagerManagerManagerManager

TelephonyTelephonyManagerManager

TelephonyTelephonyManagerManager

ProviderProviderProviderProvider

ResourceResourceManagerManagerResourceResourceManagerManager

SystemSystemSystemSystem

LocationLocationManagerManagerLocationLocationManagerManager

ManagerManagerManagerManager

…………

LL IBRAR I E SI BRAR I E S AA NDRO IDNDRO ID RRUNT IMEUNT IME

Surface ManagerSurface Manager

Dalvik Virtual MachineDalvik Virtual Machine

Core LibrariesCore Libraries

OpenGL|ESOpenGL|ES

SGLSGL

Media FrameworkMedia Framework

FreeTypeFreeType

SSLSSL

SQLiteSQLite

WebKitWebKit

LibcLibc

Surface ManagerSurface ManagerSurface ManagerSurface Manager

Dalvik Virtual MachineDalvik Virtual MachineDalvik Virtual MachineDalvik Virtual Machine

Core LibrariesCore LibrariesCore LibrariesCore Libraries

OpenGL|ESOpenGL|ESOpenGL|ESOpenGL|ES

SGLSGLSGLSGL

Media FrameworkMedia FrameworkMedia FrameworkMedia Framework

FreeTypeFreeTypeFreeTypeFreeType

SSLSSLSSLSSL

SQLiteSQLiteSQLiteSQLite

WebKitWebKitWebKitWebKit

LibcLibcLibcLibc

HHARDWAREARDWARE AABSTRACT IONBSTRACT ION LLAYERAYER

GraphicsGraphics AudioAudio CameraCamera BluetoothBluetooth GPSGPS Radio(RIL)Radio(RIL) WiFiWiFi ……

HHARDWAREARDWARE AABSTRACT IONBSTRACT ION LLAYERAYER

GraphicsGraphicsGraphicsGraphics AudioAudioAudioAudio CameraCameraCameraCamera BluetoothBluetoothBluetoothBluetooth GPSGPSGPSGPS Radio(RIL)Radio(RIL)Radio(RIL)Radio(RIL) WiFiWiFiWiFiWiFi …………

LL INUXINUX KK ERNELERNEL

Display DriverDisplay Driver Camera DriverCamera Driver Bluetooth DriverBluetooth Driver Shared MemoryShared MemoryDriverDriver

Binder (IPC)Binder (IPC)DriverDriver

USB D iUSB D i K d D iK d D i WiFi D iWiFi D i AudioAudio PowerPower

LL INUXINUX KK ERNELERNEL

Display DriverDisplay DriverDisplay DriverDisplay Driver Camera DriverCamera DriverCamera DriverCamera Driver Bluetooth DriverBluetooth DriverBluetooth DriverBluetooth Driver Shared MemoryShared MemoryDriverDriver

Shared MemoryShared MemoryDriverDriver

Binder (IPC)Binder (IPC)DriverDriver

Binder (IPC)Binder (IPC)DriverDriver

USB D iUSB D iUSB D iUSB D i K d D iK d D iK d D iK d D i WiFi D iWiFi D iWiFi D iWiFi D i AudioAudioAudioAudio PowerPowerPowerPower

34th Korea Android Seminar - www.kandroid.org

USB DriverUSB Driver Keypad DriverKeypad Driver WiFi DriverWiFi Driver AudioAudioDriverDriver

PowerPowerManagementManagementUSB DriverUSB DriverUSB DriverUSB Driver Keypad DriverKeypad DriverKeypad DriverKeypad Driver WiFi DriverWiFi DriverWiFi DriverWiFi Driver AudioAudio

DriverDriverAudioAudioDriverDriver

PowerPowerManagementManagement

PowerPowerManagementManagement

Page 4: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Overview : Activity & View Hierarchy

아래의 내용은 “액티비티”, “뷰 계층구조와 레이아웃 샘플”, “결과 화면”에 대한 간단한 요약임.

안드로이드에서 화면을 구성하는 컴포넌트는 액티비티이며, 액티비티는 UI를 구성하기 위해 뷰 계층구조를 사용함.

뷰 계층구조는 View를 상속받은 ViewGroup과 이들을 각각 상속받는 Widget 및 Layout 오브젝트들의 계층구조임

public class HelloAndroid extends Activity {

뷰 계층구조는 View를 상속받은 ViewGroup과 이들을 각각 상속받는 Widget 및 Layout 오브젝트들의 계층구조임.

@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main);

}}}

LinearLayout

TextView ImageView

44rh Korea Android Seminar - www.kandroid.org

Page 5: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Basic : Activity Lifecycle vs. Lifetime

액티비티는 아래의 그림에서 보여지듯이 7개의 콜백(Callback) 메쏘드들로 구성된 생명주기를 가짐.

이들 생명주기에는 3개의 중첩된 루프인, entire, visible, foreground lifetime 루프가 존재함.

여기에서 우리가 주목할 부분은 1) “왜 setContentView() 시점과 액티비티가 보여지는 상태인 Running 상태가 일치하여기에서 우리가 주목할 부분은, 1) 왜 setContentView() 시점과 액티비티가 보여지는 상태인 Running 상태가 일치하

지 않는가?” 2) “액티비티 visible lifetime에서 액티비티를 보는 것은 어떻게 가능한가?” 일 것임.

entire visible foregroundlifetime lifetime lifetime

54rh Korea Android Seminar - www.kandroid.org

Page 6: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Basic : View - How Android Draws Views

뷰는 자신이 보유한 직사각형 영역에 대한 그리기를 담당한다. 이를 위해 위치와 크기를 결정하기 위한 “측정 패스와

레이아웃 패스”를 수행하는 콜백 메쏘드를 가지며, onDraw() 가 호출될 때 해당 영역에 대한 실제 그리기를 수행함.

“측정 패스”에서는 자신이 원하는 크기를 자신을 감싸고 있는 부모 뷰에서 요청하며 “레이아웃 패스”에서는 부모로 부측정 패스 에서는 자신이 원하는 크기를 자신을 감싸고 있는 부모 뷰에서 요청하며, 레이아웃 패스 에서는 부모로 부

터 결정된 크기와 위치를 전달 받는다. 그리고 최종적으로 onDraw() 콜백에서 해당 영역에 대한 그리기를 수행함.

여기에서의 핵심은, “onDraw()에 파라미터로 전달된 Canvas란 무엇인가?”, “Canvas에 그리는 시점과 실제 화면에 보여

지는 시점은 일치하는가?”, “onDraw()의 호출 시점은 누가 결정하는가?” 등일 것이다.

// 측정 패스onMeasure (int widthMeasureSpec,

int heightMeasureSpec) { }

// 레이아웃 패스onLayout (boolean changed,

int left, int top, int right, int bottom) { }g , ) { }

// 드로잉 시점onDraw (Canvas canvas) { }

64rh Korea Android Seminar - www.kandroid.org

Page 7: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Basic : Resource - Simple Definition and Functions

안드로이드에서 리소스는 /res 디렉토리에 물리적으로 존재하며, non-code영역에 속하는 외부 요소들이다.

이러한 리소스들은 코드상에서 레퍼런스 가능하도록 자동으로 R.java 파일내의 내부 (inner) 클래스에 고유한 정수 값으

로 등록된다. (Eclipse ADT에 의함).

리소스를 구성하는 많은 요소들이 XML 기반이라는 사실은 매우 중요하다. 여기에서 사용된 대부분의 XML 파일들은

aapt 에 의해 deflation의 과정을 거쳐 안드로이드 package에 묶여지며, 이는 다시 inflation의 과정 거친 후 사용된다.

(여기에서 Deflation과 Inflation은 일반적인 압축 알고리즘을 이야기하지 않음 개념적으로 이해하는 것이 바람직함 )(여기에서 Deflation과 Inflation은 일반적인 압축 알고리즘을 이야기하지 않음. 개념적으로 이해하는 것이 바람직함.)

XML 레이아웃 파일 및 기타 XML 파일들.

XML 레이아웃 파일에서 엘리먼트는 Java 클래스 파일에,

애트리뷰트는 Java 메쏘드와 밀접하게 관련되어 있다.

특히 엘리먼트는 Java 클래스 파일에 직접적으로 맵핑된다특히, 엘리먼트는 Java 클래스 파일에 직접적으로 맵핑된다.

이것이 의미하는 바는, Java 클래스의 일반적인 상속 및 오버

라이딩 개념이 이곳에도 존재한다는 것이다.

이것은 또한 안드로이드에서 사용되는 레이아웃 파일에 대한

DTD 또는 스키마에 대한 사전적인 정의를 어렵게 만드는 이

유이기도 하다.

74rh Korea Android Seminar - www.kandroid.org

Page 8: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Basic : Surface Flinger - Window, Surface and Frame Buffer

Surface Flinger 는 모든 서피스(Surface)를 프레임버퍼(Frame Buffer) 디바이스에 렌더링하는 것으로 시스템내의 모든

서피스들을 하나의 통합하는 역할을 담당함. Surface Flinger에 의해 사용되는 서피스는 2D 또는 3D 서피스 모두 가능

하며, 이 서피스들은 여러 개의 애플리케이션에 기반할 수 있으며, 중층적인(Layered)인 구조 기반임.하며 이 서피 들은 여러 개의 애플리케이션에 기반할 수 있 며 중층적 ( y ) 구 기반임

안드로이드에는 윈도우(Window)란 개념이 존재함. 모든 윈도우는 하단에 서피스 오브젝트를 가지고 구현되어 있음. 그

리고 이 서피스 오브젝트는 Surface Flinger에 의해 프레임버퍼에 전달됨. 서피스는 더블 버퍼링 구조를 지원함.

B k B ff 는 드로잉을 위한 공간으로 사용되며 F t B ff 는 합성(C iti )을 위해 사용된다Back Buffer는 드로잉을 위한 공간으로 사용되며, Front Buffer는 합성(Composition)을 위해 사용된다.

서피스를 사용할 때 unlockCanvas()를 호출하게 하면, Back Buffer에 드로잉된 결과가 Front Buffer로 보내짐.

이것이 의미하는 바는 Surface Flinger에 의해 프레임 버퍼로 결과가 전송되어 스크린상에 보여진다는 것을 의미함.

FrameBufferFrameBufferFrameBufferFrameBufferSurfaceFlingerSurfaceFlingerSurfaceFlingerSurfaceFlinger

SurfaceSurfaceSurfaceSurface

SurfaceSurfaceSurfaceSurfaceAPPAPPAPPAPP

FrameBufferFrameBufferFrameBufferFrameBufferSurfaceFlingerSurfaceFlingerSurfaceFlingerSurfaceFlingerSurfaceSurfaceSurfaceSurface

SurfaceSurfaceSurfaceSurface

APPAPPAPPAPP

84rh Korea Android Seminar - www.kandroid.org

Page 9: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Basic : Display Driver - Double Buffering and Page Flipping

안드로이드는 표준 리눅스 프레임버퍼 디바이스인 /dev/fb0 또는 /dev/graphics/fb0 에 의존함.

아래의 그림은 Double Buffering과 Page Flipping에 대한 간단한 개념 설명임.

안드로이드는 Double Buffering에서의 Buffer Copy를 최소화 하기 위해, Back Buffer와 Front Buffer(Primary Surface)간

Double Buffering Page Flipping

g py y

의 Page Flipping을 사용한다.

Draw

ImageBack Buffer

ScreenPrimary Surface

Back BufferPrimary Surface

Copy (BLT : Block Line Transfer)

Primary Surface

Screen

Primary Surface

Page Flipping : change primary surface pointer and back buffer pointerfor screen video

94rh Korea Android Seminar - www.kandroid.org

ImageBack Buffer

ScreenPrimary Surface

Primary SurfaceBack Buffer

Page 10: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Advanced : Activity & View Hierarchy (1)

아래의 두 그림 중 좌측은 화면 스크린 캡쳐 이미지이고, 우측은 액티비티 뷰 계층구조 전체에 대한 캡쳐 이미지임.

두 이미지의 차이는 StatusBar에서 발생함. (우측 이미지 캡쳐는 SDK tools 디렉토리의 hierarchyviewer 에 기초함.)

vs

104rh Korea Android Seminar - www.kandroid.org

Page 11: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Advanced : Activity & View Hierarchy (2)

좌측 하단의 xml과 뷰 계층구조는 setContentView()에서 사용된 xml 레이아웃 및 계층구조 그림임.

우측 하단의 뷰 계층구조는 액티비티가 실제 보유하고 있는 뷰 계층구조임

(우측 하단의 이 계층구조는 SDK tools 디렉토리의 hierarchyviewer 에 기초함.)

<?xml version="1.0" encoding="utf-8"?><LinearLayout PhoneWindow$DecorView

(FrameLayout)vs

android:layout_width="fill_parent"android:layout_height="fill_parent“ … >

<TextViewandroid:padding="10dip"android:layout_width="fill_parent"android:layout height="wrap content“

(FrameLayout)

LinearLayoutandroid:layout_height wrap_contentandroid:text="제4회 코리아 안드로이드 세미나“ …/>

<ImageViewandroid:layout_width="fill_parent"android:layout_height="wrap_content“android:src="@drawable/android_logo“ …/>

/Li L tFrameLayout(id/content)FrameLayout

LinearLayout

</LinearLayout> (id/content)y

TextView(id/title) LinearLayout

TextView

y

ImageView

(id/title)

TextView

y

ImageView

114rh Korea Android Seminar - www.kandroid.org

TextView ImageView TextView ImageView

Page 12: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Advanced : Activity & View Hierarchy (3)

Activity이곳의 그림에 언급된 PRODUCT_POLICY는 안

드로이드 Full 소스 코드 빌드시에 사용되는 빌Activity

PRODUCT_POLICY

드로이드 Full 소스 코드 빌드시에 사용되는 빌

드 스크립트이 일부임. 현재는 PhoneWindow와

MIDWindow Policy가 존재함.

PhoneWindow$DecorView(FrameLayout) MIDWindow$DecorView

LinearLayout

com.android.internal.R.layout.screen_title./frameworks/base/core/res/res/layout/screen_title.xml

<LinearLayout

FrameLayout(id/content)FrameLayout

<LinearLayout android:orientation="vertical"android:fitsSystemWindows="true"><FrameLayout

android:layout_width="fill_parent"d id l h i h "? d id / i d Ti l Si "

(id/content)

TextView(id/title)

android:layout_height="?android:attr/windowTitleSize"style="?android:attr/windowTitleBackgroundStyle"><TextView android:id="@android:id/title“ … />

</FrameLayout><FrameLayout android:id="@android:id/content“ … />

124rh Korea Android Seminar - www.kandroid.org

y @</LinearLayout>

Page 13: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Advanced : How Android Draws Views (1)

아래의 그림은 Canvas가 해당 뷰에 전달되는 과정과 뷰가 자신의 영역을 다시 그리는 과정에 대한 설명임.

여기서 중요한 것은 뷰 계층구조의 최상위에 ViewRoot가 존재한다는 사실임.

또한 onDraw()가 리턴되는 시점에서 뷰가 캔버스에 드로잉한 결과가 화면에 나타나는 것은 아님또한 onDraw()가 리턴되는 시점에서 뷰가 캔버스에 드로잉한 결과가 화면에 나타나는 것은 아님.

캔버스가 화면상에 실제로 반영되는 시점은, ViewRoot, Window, Surface, Surface Flinger 등과 연관해서 생각해야 함.

(이후에 나오는 페이지를 통해서 관련된 개념들을 정리하는 것이 요구됨)

ViewRoot

Vi Ginvalidate()draw()

ViewGroup

background.draw(Canvas)

onDraw(Canvas)

dispatchDraw(Canvas)

View View

134rh Korea Android Seminar - www.kandroid.org

Page 14: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Advanced : How Android Draws Views (2) - SurfaceView

서피스 뷰(SurfaceView)는 뷰 계층구조내에서 드로잉 전용 공간을 제공하는 뷰에 대한 특수한 서브클래스임.

서피스 뷰는 뷰가 가지는 일반적 한계, 즉 뷰 스스로가 그리는 시점을 결정할 수 없다는 것에 대한 해법이다.

이를 위해 서피스 뷰는 뷰 계층구조내의 드로잉 시점(onDraw() 콜백) 시점에 해당 위치에 투명한 펀치홀만을 유지함.

<?xml version="1.0" encoding="utf-8"?><LinearLayout

이를 위해 서피스 뷰는 뷰 계층구조내의 드로잉 시점(onDraw() 콜백) 시점에 해당 위치에 투명한 펀치홀만을 유지함.

이 투명 펀치홀에 그리기를 위해 서피스 뷰는 서피스 홀더와 독자적인 보조 쓰레드를 사용함.

<LinearLayout android:layout_width="fill_parent"android:layout_height="fill_parent“ … >

<TextViewandroid:text="제4회 코리아 안드로이드 세미나“ …/>

<ImageViewandroid:src="@drawable/android_logo“ …/>

<SurfaceViewandroid:width=“100dip”android:height=“100dip” />

</LinearLayout>

LinearLayout invalidate()

draw() ?

TextView ImageView SurfaceView

PunchHole

144rh Korea Android Seminar - www.kandroid.org

TextView ImageView SurfaceView

Page 15: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Advanced : How Android Draws Views (3) - Window

윈도우는 애플리케이션의 룩앤필과 같

Window

윈도우는 애플리케이션의 룩앤필과 같

은 일반적인 윈도우 요소들을 명시하는

추상 클래스임.

Window이것은 백그라운드, 타이틀 영역, 디폴

트 키 프로세싱과 같은 표준 UI 정책을

제공한다. 앞선 페이지에서 간단히 언

급된 PhoneWindow가 이러한 Window

Window

급된 PhoneWindow가 이러한 Window

에 대한 구현임.

액티비티, 윈도우, 서피스의 관계

액티비티는 하나 이상의 윈도우를 가질

수 있음.

Screen 윈도우는 하나 이상의 서피스(Surface)

를 가질 수 있음.

154rh Korea Android Seminar - www.kandroid.org

Page 16: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Architecture : Canvas - 2D Drawing Context

캔버스는 비트맵(Bitmap) 또는 서피스(Surface) 오브젝트에 대한 실질적인 비트 합성(Bit Composition)을 담당하는 드

로잉 공간임. 캔버스는 다양한 형태의 2D 그래픽 API를 제공한다. 단, 이것은 OpenGL ES와 같은 하드웨어 가속기를 지

원하지 않음. 원하지 않음

캔버스의 Java 베이스 클래스는 Canvas이며, 이는 안드로이드 2D 그래픽 라이브러리인 Skia 그래픽 라이브러리에 기반

한다. 또한 Skia 그래픽 라이브러리는 안드로이드상에서의 corecg, sgl, skiaagl를 구성하는 기초가 된다.

이중 sgl은 2D 그랙픽을 위한 것이고, skiaagl은 3D Open GL을 위한 것이지만 현재는 사용되지 않는 듯함.

l에서 사용되는 외부 라이 러리에는 if j f 라이 러리 등이 있음sgl에서 사용되는 외부 라이브러리에는 gif, jpeg, png, freetype 라이브러리 등이 있음.

Canvas

GIF JPEG

SGL

GIF JPEG

PNGFreeType

Surface

164rh Korea Android Seminar - www.kandroid.org

Page 17: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Architecture : OpenGL ES - 3D Graphics Library

안드로이드는 빠르고 복잡한 3D 이미지를 사용하기 위해 OpenGL ES 라이브러리를 제공한다. 이를 위해, android.opengl

과 javax.microedition.khronos.opengles 패키지를 제공한다. 이러한 java 패키지들은 OpenGL ES의 네이티브 라이브러리

(wrapper)인 GLES_CM에 기반하며, 이는 다시 EGL(네이티브 플랫폼 그래픽 인터페이스)에 기반한다.

EGL을 구현하는 방식은 hardware적인 구현과 software적인 구현이 제공되며, 이를 위해 libagl.so(안드로이드 GL)과

libhgl.so(하드웨어 GL) 가 사용된다. 아래는 EGL Surface의 생성과정임.

mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay, mEglConfig, holder, null);GLSurface sur = eglCreateWindowSurface(dpy, cnf, new EGLNativeWindowSurface(window), base);

EGLNativeWindowSurface(const sp<Surface>& surface);

OpenGL ES

hgl agl

EGL

GPU PixelFlinger

174rh Korea Android Seminar - www.kandroid.org

Surface

Page 18: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Architecture : Activity, ViewRoot, Window …

Activity Window ManagerToken

ViewRoot(Handler)

Window

Surface

Session

Window

LayoutParams(for window layer)

PhoneWindow$DecorView(FrameLayout)

Surface Window

Li L tLinearLayout

FrameLayoutFrameLayout (id/content)FrameLayout

TextView(id/title)

184rh Korea Android Seminar - www.kandroid.org

(id/title)

Page 19: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Architecture : SurfaceFlinger

APPAPPAPPAPP SurfaceFlinger::instantiate()APPAPPAPPAPP SurfaceFlinger::instantiate()

- AddSevice(“Surface Flinger”..)

SurfaceFlinger::readyToRun()

SurfaceSurfaceSurfaceSurface - Gather EGL extensions- Create EGL Surface and Map Frame Buffer- Create our OpenGL ES context- Gather OpenGL ES extensions- Init Display Hardware for GPU

APPAPPAPPAPP

Init Display Hardware for GPU

SurfaceFlinger::threadLoop()

- Wait for Event

FrameFrameFrameFrameSurfaceSurfaceSurfaceSurface

SurfaceSurfaceSurfaceSurfaceWait for Event

- Check for tranaction- Post Surface (if needed)- Post FrameBuffer …

BufferBufferBufferBufferFlingerFlingerFlingerFlinger

S fS fS fS f

194rh Korea Android Seminar - www.kandroid.org

SurfaceSurfaceSurfaceSurface

Page 20: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

Architecture : ActivityManager vs OOM

ActivityManager

init.rc OOMKiller

Foreground process

Visible Process

Manager# Define the oom_adj values for the classes of processes that can be# killed by the kernel. These are used in ActivityManagerService.

setprop ro.FOREGROUND_APP_ADJ 0

Killer

Visible Process

Service Process

Background process

Empty process

setprop ro.VISIBLE_APP_ADJ 1setprop ro.SECONDARY_SERVER_ADJ 2setprop ro.HIDDEN_APP_MIN_ADJ 7setprop ro.CONTENT_PROVIDER_ADJ 14setprop ro.EMPTY_APP_ADJ 15

# Define the memory thresholds at which the above process

/proc/<pid>/oom_adj/proc/<pid>/oom_score

# Define the memory thresholds at which the above process classes will# be killed. These numbers are in pages (4k).

setprop ro.FOREGROUND_APP_MEM 1536setprop ro.VISIBLE_APP_MEM 2048setprop ro.SECONDARY_SERVER_MEM 4096

t HIDDEN APP MEM 5120setprop ro.HIDDEN_APP_MEM 5120setprop ro.CONTENT_PROVIDER_MEM 5632setprop ro.EMPTY_APP_MEM 6144

# Write value must be consistent with the above properties.write /sys/module/lowmemorykiller/parameters/adj

0,1,2,7,14,15, , , , ,write /proc/sys/vm/overcommit_memory 1write /sys/module/lowmemorykiller/parameters/minfree

1536,2048,4096,5120,5632,6144# Set init its forked children's oom_adj.write /proc/1/oom_adj -16

204rh Korea Android Seminar - www.kandroid.org

Page 21: Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)

감사합니다

214rh Korea Android Seminar - www.kandroid.org