스타티드 서비스의 파생 클래스
클라이언트가 startService과 더불어 인텐트를 전달할 때 인텐트 단위별로 순차적으로 동작함
여러 클라이언트에서 동시에 인텐트가 전달되더라도 순서대로 하나씩 처리한다
인텐트 서비스를 이용하는 카운트다운 서비스
장점
- onHandleIntent 함수는 별도의 워커 스레드에서 동작하기 때문에 따로 스레드를 생성할 필요가 없다. 즉, 서비스에서 ANR을 걱정할 필요가 없다.
- 동기화 문제가 자동으로 해결된다.
- 활용도가 높음
- 스타티드 서비스 구현시 인텐트 서비스를 사용하는 것이 구현이 간단함.
- 기존 스타티드 서비스 구현 시 발생할 수 있는 동기화와 ANR 문제가 발생하지 않는다.
서비스 연결(주동작)
클라이언트가 외부 서비스와 연결하기
이때 버튼을 눌러도 onServiceConnected, onServiceDisconnected 가 호출 되지 않는다.
-> 클라이언트와 서비스는 연결만 된거지 요청과 결과를 담을 매개체가 없기 때문에
-> 통신을 가능하게 하는 매개체를 바인더라고 부른다.
바인더
- 서비스에 존재하는 인터페이스를 포함한다.
- 클라이언트는 바인더를 이용해서 서비스의 인터페이스를 호출할 수 있다.
- 바인더를 만드는 일은 복잡함
- 방법: 안드로이드의 인터페이스 정의 언어인 AIDL을 사용함
- AIDL 언어로 인터페이스를 작성하면 자동으로 바인더를 생성해 주고 있다.
- 카운트 서비스에 바인더 인터페이스 구현
-> 바인더 객체 내의 getCurCountNumber 함수를 구현한다.
- 이제 클라이언트에서 바인더를 받고 서버의 인터페이스를 사용해보자
- 서비스의 ICountService.aidl을 클라이언트 프로젝트에 추가한다.
- 클라이언트