안드로이드 서비스

  • 주기적으로 특정한 일을 수행하는 백그라운드 프로세스
  • 단말의 위치 알아내거나 센서 값을 읽어오는 등 안드로이드에서 기본적으로 서비스 형태로 제공한다.

안드로이드 서비스 분류

  • 안드로이드 서비스
    • 시스템 서비스 : 프레임워크에서 기본적으로 제공
      • 자바 시스템 서비스
        • 코어 플랫폼 서비스
        • 하드웨어 서비스
      • 네이티브 시스템 서비스
    • 애플리케이션 서비스 : Service 클래스를 상속해서 구현

안드로이드 애플리케이션 서비스

  • Service 클래스를 확장한 클래스의 인스턴스
  • UI 없이 주기적으로 특정한 일을 수행하는 백그라운드 프로세스
  • 안드로이드 애플리케이션 컴포넌트(ex. 액티비티, 브로드캐스트 리시버)의 일종

  • 애플리케이션 개발자가 서비스를 이용하는 방법
    1. 서비스 시작, 종료
      서비스를 백그라운드로 실행/종료시킨다.
    2. 바인딩을 통한 서비스 원격 제어
      액티비티처럼 서비스 클라이언트가 서비스에 바인딩을 하면 클라이언트는 바인딩이 유지되는 동안 서비스가 제공하는 인터페이스를 통해 서비스의 각종 기능을 제어할 수 있다.

애플리케이션 서비스 분류

  1. 로컬 서비스
    서비스와 이를 생성한 서비스 클라이언트(보통 액티비티)가 동일한 프로세스에서 동작
    로컬 서비스를 생성한 애플리케이션 내에서만 사용 가능
    애플리케이션이 종료되면 함께 종료
  2. 리모트 서비스
    서비스와 이를 생성한 서비스 클라이언트(보통 액티비티)가 다른 프로세스에서 동작
    애플리케이션이 종료되어도 계속 동작
    잘못 구현된 리모트 서비스는 프로그램이 종료하더라도 시스템 자원(배터리 등)을 비효율적으로 소모할 수 있기 때문에 설계에 신중을 기해야한다.

로컬 서비스와 리모트 서비스에서 서비스 제어를 위한 바인딩 방법

  • 바인딩 : 서비스 클라이언트 프로그램이 서비스를 원격 제어하기 위해 상호 연결하는 과정
    1. 로컬 서비스 바인딩 방법
  • 클라이언트 프로그램이 바인딩할 로컬 서비스의 레퍼런스만 얻으면 된다.
  • 클라이언트는 바인딩을 통해 얻은 서비스의 레퍼런스를 통해 서비스가 제공하는 메서드를 호출할 수 있다.
    1. 리모트 서비스 바인딩 방법
  • 액티비티가 리모트 서비스를 제어하려면 IPC 메커니즘을 이용해야 한다.
  • 리모트 서비스 바인딩 : 바인더 IPC를 수행하기 위한 연결 설정

로컬 서비스 동작 과정

(1) LocalService 연결 요청
(2) 서비스와 통신하기 위한 LocalBinder 객체 반환
(3) LocalBinder 객체의 getService()를 호출 : LocalService 객체의 레퍼런스 반환
(4) LocalService 객체 연결

리모트 서비스 동작 과정

(1) RemoteService 연결 요청
(2) Binder 객체 제공
(3) Binder 객체 이용 : 서비스 프록시 객체 생성
(4) getPid() 프록시 함수 호출
(5) 바인더 IPC 데이터
(6) getPid() 스텁 메서드 호출


안드로이드 시스템 서비스

  • 디바이스 제어, 위치 정보 제공, 알람 설정 및 통지 메시지 표시 등과 같이 시스템의 가장 기본적인 핵심 기능들을 제공

시스템 서비스 분류

  1. 네이티브 시스템 서비스 : C++로 작성
    • Audio Flinger 서비스 : 오디오 데이터를 오디오 출력장치로 내보낸다
    • Surface Flinger 서비스 : Surface를 조합해 프레임 버퍼 장치로 렌더링한다
  2. 자바 시스템 서비스 : 부팅 시 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를 생성한 다음, 실행되는 자바 시스템 서비스를 컨텍스트 매니저에 등록한다.