본문으로 바로가기

Android Service간 통신 #3

category 개발이야기/Android 2017. 10. 12. 01:00
반응형

LocalBinder를 이용한 통신

이전 글에서는 Activity와 Service간 통신을 위하여 local binder를 이용하여 사용하는 방법을 설명하였다. 이때 사용한 두가지 방법은 아래와 같다
1. Local binder를 이용한 service객체 자체를 넘김.
2. Local binder를 이용하여 handler를 Messenger로 wrapping 한 뒤에 binder로 넘김.

1번의 경우 단방향 통신이 가능하나, 예제에서 처럼 작성시 상호참조가 발생할수 있으니, Service에 추가로 정의된 함수를 호출하기 위한 interface를 하나 구현 하는것이 좋다.

ResultReceiver를 이용한 통신

여기서는 ResultReciever를 이용하여 단방향으로 Activity <- service간 통신에 대해서 설명한다.
가장 간단한 시나리오는 이렇다.
1. Activity에서 service를 띄운다. (이때 intent에 필요한 정보를 담아서 보낸다.)
2. Service에서 작업이 완료되면 activity에 결과를 전달한다.

ResultReciever는 Parcelable을 상속받아 구현된 객체로 intent에 담아 전달이 가능하다.
이 때 onReceivedResult(int, Bundle) callback을 Activity가 구현하여 넘겨주면, Service에서 어떤 작업 후 호출할 수 있다.

참조: https://developer.android.com/reference/android/os/ResultReceiver.html

ResultReceiver를 이용한 통신 방법은 단방향이면서, 단일 Acitivity와 Service가 연결될때 사용한다.

일단 간단한 예제는 아래와 같다
1) ResultReceiver의 구현

2) Activity의 구현

3) IntentService의 구현


LocalBroadcastManager를 이용한 통신

LocalBroadcastManager는 Service가 여러 Activity와 상호동작이 필요할때 유용하다.
물론 단일 Activity와 service가 연결된 경우에도 사용가능하며, invisible한 상태에서의 동작을 막기위해 Receiver는 onResume()에서 등록되고 onStop()에서 해제된다.

1) IntentService의 구현







반응형