안드로이드 서비스 개요
by Sihyeon Kim
안드로이드 서비스
- 주기적으로 특정한 일을 수행하는 백그라운드 프로세스
- 단말의 위치 알아내거나 센서 값을 읽어오는 등 안드로이드에서 기본적으로 서비스 형태로 제공한다.
안드로이드 서비스 분류
- 안드로이드 서비스
- 시스템 서비스 : 프레임워크에서 기본적으로 제공
- 자바 시스템 서비스
- 코어 플랫폼 서비스
- 하드웨어 서비스
- 네이티브 시스템 서비스
- 자바 시스템 서비스
- 애플리케이션 서비스 : Service 클래스를 상속해서 구현
- 시스템 서비스 : 프레임워크에서 기본적으로 제공
안드로이드 애플리케이션 서비스
- Service 클래스를 확장한 클래스의 인스턴스
- UI 없이 주기적으로 특정한 일을 수행하는 백그라운드 프로세스
-
안드로이드 애플리케이션 컴포넌트(ex. 액티비티, 브로드캐스트 리시버)의 일종
- 애플리케이션 개발자가 서비스를 이용하는 방법
- 서비스 시작, 종료
서비스를 백그라운드로 실행/종료시킨다. - 바인딩을 통한 서비스 원격 제어
액티비티처럼 서비스 클라이언트가 서비스에 바인딩을 하면 클라이언트는 바인딩이 유지되는 동안 서비스가 제공하는 인터페이스를 통해 서비스의 각종 기능을 제어할 수 있다.
- 서비스 시작, 종료
애플리케이션 서비스 분류
- 로컬 서비스
서비스와 이를 생성한 서비스 클라이언트(보통 액티비티)가 동일한 프로세스에서 동작
로컬 서비스를 생성한 애플리케이션 내에서만 사용 가능
애플리케이션이 종료되면 함께 종료 - 리모트 서비스
서비스와 이를 생성한 서비스 클라이언트(보통 액티비티)가 다른 프로세스에서 동작
애플리케이션이 종료되어도 계속 동작
잘못 구현된 리모트 서비스는 프로그램이 종료하더라도 시스템 자원(배터리 등)을 비효율적으로 소모할 수 있기 때문에 설계에 신중을 기해야한다.
로컬 서비스와 리모트 서비스에서 서비스 제어를 위한 바인딩 방법
- 바인딩 : 서비스 클라이언트 프로그램이 서비스를 원격 제어하기 위해 상호 연결하는 과정
- 로컬 서비스 바인딩 방법
- 클라이언트 프로그램이 바인딩할 로컬 서비스의 레퍼런스만 얻으면 된다.
- 클라이언트는 바인딩을 통해 얻은 서비스의 레퍼런스를 통해 서비스가 제공하는 메서드를 호출할 수 있다.
- 리모트 서비스 바인딩 방법
- 액티비티가 리모트 서비스를 제어하려면 IPC 메커니즘을 이용해야 한다.
- 리모트 서비스 바인딩 : 바인더 IPC를 수행하기 위한 연결 설정
로컬 서비스 동작 과정
(1) LocalService 연결 요청
(2) 서비스와 통신하기 위한 LocalBinder 객체 반환
(3) LocalBinder 객체의 getService()를 호출 : LocalService 객체의 레퍼런스 반환
(4) LocalService 객체 연결
리모트 서비스 동작 과정
(1) RemoteService 연결 요청
(2) Binder 객체 제공
(3) Binder 객체 이용 : 서비스 프록시 객체 생성
(4) getPid() 프록시 함수 호출
(5) 바인더 IPC 데이터
(6) getPid() 스텁 메서드 호출
안드로이드 시스템 서비스
- 디바이스 제어, 위치 정보 제공, 알람 설정 및 통지 메시지 표시 등과 같이 시스템의 가장 기본적인 핵심 기능들을 제공
시스템 서비스 분류
- 네이티브 시스템 서비스 : C++로 작성
- Audio Flinger 서비스 : 오디오 데이터를 오디오 출력장치로 내보낸다
- Surface Flinger 서비스 : Surface를 조합해 프레임 버퍼 장치로 렌더링한다
- 자바 시스템 서비스 : 부팅 시 SystemServer 시스템 프로세스에 의해 일괄적으로 실행된다
- 코어 플랫폼 서비스 (Core Platform Service) : 안드로이드 프레임워크가 동작하는 데 필수적인 서비스(Activity, Window, Package Manager Service)
- 하드웨어 서비스 (Hardware Service) : 저수준 하드웨어 제어를 위한 API를 제공하는 서비스(Alarm Manager, Connectivity, Location, Power, Sensor, Telephony, Wifi Service)
자바 시스템 서비스 이용
자바 시스템 서비스를 이용하려면 각 서비스와 통신 가능한 Local Manager 객체를 이용해야 한다.
시스템 서비스의 실행
부팅 시 미디어 서버(Media Server)와 시스템 서버(System Server)라는 두 시스템 프로세스에 의해 시스템 서비스가 실행된다.
- 미디어 서버 프로세스
- Audio Flinger, Media Player Service와 같은 네이티브 서비스를 실행하는 역할
- 각 서비스의 인스턴스를 생성한 다음, 생성된 서비스를 컨텍스트 매니저에게 등록한다.
- 시스템 서버
- Surface Flinger를 비롯한 모든 자바 시스템 서비스를 실행한다.
- ServerThread를 생성한 다음, 실행되는 자바 시스템 서비스를 컨텍스트 매니저에 등록한다.
Subscribe via RSS