14
Power Manager Service 송형주 송형주

Power Manager Service 송형주 Rev02

Embed Size (px)

Citation preview

Page 1: Power Manager Service 송형주 Rev02

Power Manager Service

송형주송형주

Page 2: Power Manager Service 송형주 Rev02

Service를 분석하기 위해 필요한 지식?Service를 분석하기 위해 필요한 지식?

• Thread

• Looper – In-process message passingLooper In process message passing

• Intent – 시스템 전체 범위의 IPC

• Broadcast Receiver

• Manager와 Service의 관계• Manager와 Service의 관계

Page 3: Power Manager Service 송형주 Rev02

Threads and LoopersAPK Package

ProcessL lThread

LooperIntent

Receiver

Local Service

Call

ThreadActivity

UI Events

Message Queue

External Service

CallsActivity System CallsSystem Events

Page 4: Power Manager Service 송형주 Rev02

HandlerThreadHandlerThreadL 를 가진 스레드를 생성하기 위한 클래스• Looper를 가진 스레드를 생성하기 위한 클래스

• Looper를 이용하기 위해서는 핸들러를 생성해야함Looper를 이용하기 위해서는 핸들러를 생성해야함.

Page 5: Power Manager Service 송형주 Rev02

looper란?looper란?

class LooperThread extends Thread {

public Handler mHandler;p ;

public void run() {Looper.prepare(); // 현재 스레드의 looper 초기화

mHandler = new Handler() {public void handleMessage(Message msg) {

// process incoming messages here}

}; 핸들러 코드

Looper.loop(); // 메시지큐 실행

}}}

Page 6: Power Manager Service 송형주 Rev02

Looper Handler MessageQueueLooper, Handler, MessageQueueThread

Message Queue

Thread

Looper3. deque

1. 메시지 수신2 E

4. Dispatch

Handler(message, Runnable) 2. Enque

handleMessage()

5. 메시지 처리

Page 7: Power Manager Service 송형주 Rev02
Page 8: Power Manager Service 송형주 Rev02

Android Power ManagementAndroid Power ManagementS t• Support– screen on/off – screen backlight on/off– keyboard backlight on/off– button backlight on/off – adjust screen brightness

• Not Supportpp– Sleep or Standby mode to fully use CPU’s

capability.

Page 9: Power Manager Service 송형주 Rev02

Power Manager Service Sequence Flow

초기화power = new PowerManagerService();

PowerMangerService 등록

ServiceManager.addService(Context.POWER_SERVICE, power);

power.init(context, hardware, PowerMangerService (HandlerThread)생성

p ( , ,ActivityManagerService.getDefault(), battery);

System Ready

Page 10: Power Manager Service 송형주 Rev02

WakeLock?WakeLock?

PowerManager pm = (PowerManager) getSystemService(Context POWER SERVICE);PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);PowerManager.WakeLock wl =

pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");

wl acquire();wl.acquire();..screen will stay on during this section..

wl.release();

Page 11: Power Manager Service 송형주 Rev02

Power Management Framework

Page 12: Power Manager Service 송형주 Rev02

Power Manger Service 구조Power Manger Service 구조Java Side

C++ Side

Page 13: Power Manager Service 송형주 Rev02

참고참고

• frameworks/base/core/jni

– 안드로이드 런타임 관련 소스안드로이드 런타임 관련 소스

– Android.mk : 안드로이드 런타임 Makefile• output : libandroid runtime 생성• output : libandroid_runtime 생성

A d idR ti t tR (JNIE )• AndroidRuntime::startReg(JNIEnv* env)

– 일반적인 JNI로 연결되는 네이티브 함수를 등록하는 함수

Page 14: Power Manager Service 송형주 Rev02

AIDLAIDL

• 데이터 마샬링/언마샬링

– 일부 안드로이드 문서는 flattened 라는 표현일부 안드로이드 문서는 flattened 라는 표현사용