Upload
iamhjoo-
View
5.079
Download
5
Embed Size (px)
Citation preview
Power Manager Service
송형주송형주
Service를 분석하기 위해 필요한 지식?Service를 분석하기 위해 필요한 지식?
• Thread
• Looper – In-process message passingLooper In process message passing
• Intent – 시스템 전체 범위의 IPC
• Broadcast Receiver
• Manager와 Service의 관계• Manager와 Service의 관계
Threads and LoopersAPK Package
ProcessL lThread
LooperIntent
Receiver
Local Service
Call
ThreadActivity
UI Events
Message Queue
External Service
CallsActivity System CallsSystem Events
HandlerThreadHandlerThreadL 를 가진 스레드를 생성하기 위한 클래스• Looper를 가진 스레드를 생성하기 위한 클래스
• Looper를 이용하기 위해서는 핸들러를 생성해야함Looper를 이용하기 위해서는 핸들러를 생성해야함.
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(); // 메시지큐 실행
}}}
Looper Handler MessageQueueLooper, Handler, MessageQueueThread
Message Queue
Thread
Looper3. deque
1. 메시지 수신2 E
4. Dispatch
Handler(message, Runnable) 2. Enque
handleMessage()
5. 메시지 처리
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.
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
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();
Power Management Framework
Power Manger Service 구조Power Manger Service 구조Java Side
C++ Side
참고참고
• 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로 연결되는 네이티브 함수를 등록하는 함수
AIDLAIDL
• 데이터 마샬링/언마샬링
– 일부 안드로이드 문서는 flattened 라는 표현일부 안드로이드 문서는 flattened 라는 표현사용