서비스(2)

·2021년 11월 27일
0

안드로이드

목록 보기
16/17

인텐트 서비스

스타티드 서비스의 파생 클래스
클라이언트가 startService과 더불어 인텐트를 전달할 때 인텐트 단위별로 순차적으로 동작함
여러 클라이언트에서 동시에 인텐트가 전달되더라도 순서대로 하나씩 처리한다

인텐트 서비스를 이용하는 카운트다운 서비스

장점

  • onHandleIntent 함수는 별도의 워커 스레드에서 동작하기 때문에 따로 스레드를 생성할 필요가 없다. 즉, 서비스에서 ANR을 걱정할 필요가 없다.
  • 동기화 문제가 자동으로 해결된다.
  • 활용도가 높음
    • 스타티드 서비스 구현시 인텐트 서비스를 사용하는 것이 구현이 간단함.
    • 기존 스타티드 서비스 구현 시 발생할 수 있는 동기화와 ANR 문제가 발생하지 않는다.

바운드 서비스

서비스 연결(주동작)

클라이언트가 외부 서비스와 연결하기


이때 버튼을 눌러도 onServiceConnected, onServiceDisconnected 가 호출 되지 않는다.
-> 클라이언트와 서비스는 연결만 된거지 요청과 결과를 담을 매개체가 없기 때문에
-> 통신을 가능하게 하는 매개체를 바인더라고 부른다.

바인더

  • 서비스에 존재하는 인터페이스를 포함한다.
  • 클라이언트는 바인더를 이용해서 서비스의 인터페이스를 호출할 수 있다.
  • 바인더를 만드는 일은 복잡함
    • 방법: 안드로이드의 인터페이스 정의 언어인 AIDL을 사용함
    • AIDL 언어로 인터페이스를 작성하면 자동으로 바인더를 생성해 주고 있다.
  • 카운트 서비스에 바인더 인터페이스 구현
    -> 바인더 객체 내의 getCurCountNumber 함수를 구현한다.
  • 이제 클라이언트에서 바인더를 받고 서버의 인터페이스를 사용해보자
  • 서비스의 ICountService.aidl을 클라이언트 프로젝트에 추가한다.
  • 클라이언트


profile

0개의 댓글