본문 바로가기
Android

인사이드 안드로이드 08 안드로이드 서비스 프레임워크 (1)

by OKOK 2021. 5. 18.

08 서비스 프레임워크

서비스는 시스템 서비스를 의미함. 앱 서비스는 앱 서비스로 기술함.

 

8.1 서비스 프레임워크

안드로이드 플랫폼에서 동작하는 서비스를 개발하기 위한 클래스의 집합. 서비스 프레임워크는 설계와 구현을 재사용 가능한 형태로 제공하고 있음. 다양한 클래스와 인터페이스를 확장해 서비스를 개발할 수 있음. 서비스를 등록하고 사용하는 방법이나 서비스의 바인더 아피씨를 지원하는 등의 기능은 시스템에서 제공함. 개발자는 서비스 프레임워크를 이용하기만 하면 됨. C++로 작성된 네이티브 시스템 서비스와 자바로 작성된 코어 플랫폼 서비스 및 하드웨어 서비스가 서비스 프레임워크를 이용해 구현되어 있음. 

 

프레임 워크의 대표적인 특징 두 가지는 프레임워크를 수정하는 것이 아니라 확장을 통해 새로운 기능을 추가할 수 있다는 점과 프레임워크를 이용해 구현된 프로그램의 제어 흐름이 프로그램 자체에 있는 것이 아니라 프레임워크에 의해 좌우된다는 점임. 즉. 안드로이드에서 제공하는클래스와 미리 정의된 방법을 이용해 서비스를 개발해야만 시스템에서 정상 동작하는 서비스를 구현할 수 있음. Hal, 리눅스 드바이스 드라이버, 달빅 가상 머신 등은 서비스 프레임워크에 포함되지 않음. 안드로이드 서비스 프레임워크에서 제공하는 4가지 중요한 기능 서비스 인터페이스 : 서비스 생성(서비스, 서비스 프록시), 바인더 아피씨 지원, 서비스 매니저

 

서비스 인터페이스 : 서비스가 제공하는 기능을 함수 형태로 선언하여 이를 상속받은 서비스와 서비스 프록시가 모두 동일한 인터페이스로 서비스를 제공하고 사용할 수 있는 구조를 제공함

서비스 생성 : 서비스 생성 기능은 서비스와 서비스 프록시의 생성을 지원함. 서비스에서는 서비스 인터페이스에 정의된 함수를 구현하고 서비스 프록시에서는 서비스 스텁 함수를 원격 호출할 수 있게 구현해줌. 서비스 프레임워크에서는 서비스 프록시가 서비스를 요청할 수 있게 서비스의 위치 정보를 제공하고, 서비스가 서비스 요청을 수신할 수 있는 방법을 제공함.

서비스 매니저 : 서비스 매니저는 시스템에 서비스를 등록하고 검색할 수 있는 기능을 제공함

 

8.2.1 계층별 구성 요소의 배치

서비스 프레임워크를 이요해 구현된 FooService라는 서비스.바인더 RPC 데이터에 BpBinder는 전달될 목적지 정보를, IPCThreadState는 바인더 드라이버 명령어 정보를 추가해서 바인더 IPC 데이터로 변환함

 

8.2.2 계층별 구성 요소의 상호작용

서비스 레이어에 위치한 서비스 인터페이스는 서비스 사용자와 서비스가 동일한 인터페이스를 이용해 상호작용하게 해줌. 서비스 프레임워크에서 기본적으로 제공하는 서비스 함수가 아닌 경우에는 BBinder의 onTrasact() 함수를 재정의하여 서비스 스텁 함수를 호출하도록 서비스 스텁 클래스를 구현해야 함.

1. 서비스 사용자가 foo() 함수를 호출하면, BpFooService의 foo) 프록시 함수를 호출함

2. BpFooService의 foo() 프록시 함수는 TRANSACTION_FOO RPC 코드와 인자값을 RPC데이터로 변환한 후, BpBinder 클래스의 transact() 함수를 호출하여 RPC 코드와 데이터를 전달함

3. BpBinder의 transact() 함수는 전달받은 RPC 코드와 데이터에 FooService 서비스의 서비스 핸들 정보를 추가한 후 IPCTreadState 클래스의 transact()함수에 인자로 전달함

 

IBinder, BBinder, BpBinder : IBinder 클래스는 안드로이드 바인더를 추상화한 것이며 자식 클래스로 BBinder와 BpBinder가 있음. BpBinder 클래스는 목적지 서비스의 핸들 정보를 저장하고 바인더 드라이버가 서비스 서버의 바인더 노드를 찾을 때 이용하는 바인더 객체로서의 역할을 담당함. 서비스를 시스템에 등록하는 경우 서비스 클래스를 IBinder 타입으로 형변환해서 컨텍스트 매니저에 전달해야 함. parcel 클래스가 처리할 수 있는 데이터는 C언어의 기본 자료형 및 기본 자료형의 배열, 바인더 객체, 파일 디스크립터가 있음.

댓글