정보공간_1

[6기 강남 송태현] Android Framework PowerManager 분석 본문

IT 놀이터/Elite Member Tech & Talk

[6기 강남 송태현] Android Framework PowerManager 분석

알 수 없는 사용자 2014. 11. 2. 20:20

안녕하세요 엘리트회원 6기 강남멤버십 23-2 송태현 입니다.

스마트폰이나 태블릿과 같은 이런 모바일기기에 가장 큰 특징 중 하나는 바로 휴대성이 좋다는 것입니다.

결국 휴대를 할려면 충전용 베터리를 디바이스안에 탑재되어야 하고 그 베터리가 얼마나 오래 가게 하는것이 핵심적인것입니다.

그리고 안드로이드 프레임워크와 리눅스 커널에선 새로 전원관리하는 프레임워크와 커널모듈이 있습니다.

 

이번시간에는 안드로이드내에서 전원을 관리하는 PowerManager에 대해 알아보도록 하겠습니다.

안드로이드 PowerManagement는

기본적으로 전통적인 리눅스 PM(PowerManager) 기반에서 동작합니다.

대표적인 PowerManagerService에 해당 되는 API인 WakeLock을 간단히 알아보고 뒤에서 더 알아보도록 하겠습니다.

 

WakeLock

- 안드로이드를 위해 커널에 추가된 기능입니다.

- 프로세스가 Suspend 되기 전에 driver작업이나 어플리케이션이 작업을 마칠수 있도록 임계영역을 지정하고 마저 다 작업을 마칠수 있도록 기회를 줍니다.

- kernel 내부에 power에 있습니다.

- suspend / resume 기능을 시스템콜을 통해 작동합니다.

 

안드로이드 Power Management는 다음과 같은 기능들을 제공해줍니다.

- 스크린 On/off 기능

- 스크린 BackLight 조절 기능

- 키보드 BackLight 조절 기능

- 버튼 활성화 기능

- 스크린 밝기 기능

 

PowerManager에 흐름은 다음과 같습니다.

 

처음 PowerManager를 등록(초기화) -> PowerManagerService 등록 -> PowerManagerService(해당 Service를 다루는 HandlerThread 생성) -> PowerManager 동작

 

 PowerManagerment 를 안드로이드 구조상태로 보면 다음과 같은 상태로 동작하게 됩니다.

PowerManager 설계부분을 보면

다음과 같습니다.

 

 

위와 같은 동작으로 Java에서 PowerManagerService에 기능함수들을 API형태로 호출하면

그 호출 명령이 프레임워크를 통하여 JNI 커널에 Power를 제어 할 수 있게 됩니다.

PowerManagement에 대표적인 WakeLock 이 있습니다.

APP개발시 이 기능을 잘 만 사용하면 원하는 효과를 볼 수 있지만, 잘못 사용하면

베터리의 낭비가 발생하여 더 베터리 소모가 상당히 빨리 소모될 수가 있습니다.

사용할떄 주의해야하는 WakeLock과 효율적으로 사용한느 방법데 대해서 다음시간에 알아보도록 하겠습니다.

감사합니다.