2. Service를 분석하기 위해 필요한 지식?
• Thread
• Looper – In-process message passing
In process
• Intent – 시스템 전체 범위의 IPC
• Broadcast Receiver
• Manager와 Service의 관계
3. Threads and Loopers
APK Package
Process
Thread Local
L l
Intent
Looper Service
Receiver
Call
UI
Activity Events Thread
External
Message Service
Activity Queue System Calls
Events
4. HandlerThread
• Looper를 가진 스레드를 생성하기 위한 클래스
L 를
• Looper를 이용하기 위해서는 핸들러를 생성해야함
생성해야함.
5. looper란?
class LooperThread extends Thread {
p
public Handler mHandler;
;
public void run() {
Looper.prepare(); // 현재 스레드의 looper 초기화
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
}; 핸들러 코드
Looper.loop(); // 메시지큐 실행
}
}
6. Looper, Handler,
Looper Handler MessageQueue
Thread
Message Queue
Looper
3. deque
4. Dispatch
1. 메시지 수신
(message, Runnable) 2. Enque
2 E
Handler
handleMessage()
5. 메시지 처리
7.
8. Android Power Management
• S
Support
t
– screen on/off
– screen backlight on/off
– keyboard backlight on/off
– button backlight on/off
– adjust screen brightness
• Not Support
pp
– Sleep or Standby mode to fully use CPU’s
capability.
9. Power Manager Service
Sequence Flow
초기화
power = new PowerManagerService();
ServiceManager.addService(Context.
PowerMangerService 등록 POWER_SERVICE, power);
p
power.init(context, hardware,
( , ,
PowerMangerService ActivityManagerService.getDefault(
(HandlerThread)생성 ), battery);
System Ready
10. WakeLock?
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
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();
13. 참고
• frameworks/base/core/jni
– 안드로이드 런타임 관련 소스
– Android.mk : 안드로이드 런타임 Makefile
• output : libandroid runtime 생성
libandroid_runtime
• A d idR ti
AndroidRuntime::startReg(JNIEnv* env)
t tR (JNIE )
– 일반적인 JNI로 연결되는 네이티브 함수를 등
록하는 함수