Android Window and View System › board › data › board › conference › file... · 2009 제4회Korea Android 세미나 Android Window and View System 운영자:양정수(yangjeongsoo@gmailcom)
Post on 07-Jun-2020
1 Views
Preview:
Transcript
2009 제4회 Korea Android 세미나
Android Window and View System
www kandroid org 운영자 : 양정수 (yangjeongsoo@gmail com)
2009. 10. 23.
www.kandroid.org 운영자 : 양정수 (yangjeongsoo@gmail.com)
목 차
Overview
Basic
Ad dAdvanced
ArchitectureArchitecture
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
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
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
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
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
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
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
Advanced : Activity & View Hierarchy (1)
아래의 두 그림 중 좌측은 화면 스크린 캡쳐 이미지이고, 우측은 액티비티 뷰 계층구조 전체에 대한 캡쳐 이미지임.
두 이미지의 차이는 StatusBar에서 발생함. (우측 이미지 캡쳐는 SDK tools 디렉토리의 hierarchyviewer 에 기초함.)
vs
104rh Korea Android Seminar - www.kandroid.org
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
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>
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
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
Advanced : How Android Draws Views (3) - Window
윈도우는 애플리케이션의 룩앤필과 같
Window
윈도우는 애플리케이션의 룩앤필과 같
은 일반적인 윈도우 요소들을 명시하는
추상 클래스임.
Window이것은 백그라운드, 타이틀 영역, 디폴
트 키 프로세싱과 같은 표준 UI 정책을
제공한다. 앞선 페이지에서 간단히 언
급된 PhoneWindow가 이러한 Window
Window
급된 PhoneWindow가 이러한 Window
에 대한 구현임.
액티비티, 윈도우, 서피스의 관계
액티비티는 하나 이상의 윈도우를 가질
수 있음.
Screen 윈도우는 하나 이상의 서피스(Surface)
를 가질 수 있음.
154rh Korea Android Seminar - www.kandroid.org
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
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
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)
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
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
감사합니다
214rh Korea Android Seminar - www.kandroid.org
top related