2012-12-23 8 views
6

Mam usługę, która komunikuje się za pośrednictwem AIDL z innymi usługami. Chcę, aby ta usługa była związana działaniami w moim wniosku. Czy usługa może zdefiniować dwa interfejsy \ interfejsów? Próbowałem używać komunikatora do komunikowania się z działaniami, zastępując metodę "onBind", aby zwracała inną segregator zgodnie z zamierzonym intencją (jedną dla innych usług i jedną dla działań).Czy usługa Android może komunikować się z dwoma interfejsami?

Ale gdy czynności (które używają tego samego segregatora), które nie są związane z usługą, mam błąd "moja usługa wyciekła ServiceConnection ... która pierwotnie była tutaj związana", co moim zdaniem dotyczy segregatora używanego przez usługę do komunikować się z innymi usługami.
Jeśli usługa może korzystać z dwóch interfejsów, jak mogę wdrożyć komunikację między działaniami a tą usługą?

dziękuję -Liron

Odpowiedz

0

AIDL i Messenger są wykorzystywane do IPC z innymi aplikacjami/procesami. Z Android API Guide:

Uwaga: Korzystanie AIDL jest konieczne tylko wtedy, gdy pozwala klientom z różnych aplikacji na dostęp do usługi dla IPC i chcesz obsłużyć wielowątkowości w swojej służbie. Jeśli nie musisz wykonywać równoległego IPC w różnych aplikacjach, powinieneś stworzyć swój interfejs poprzez implementację Binder lub, jeśli chcesz wykonać IPC, ale nie musisz obsługiwać wielowątkowości, implementuj swój interfejs za pomocą Messengera. Niezależnie od tego upewnij się, że rozumiesz Usługi powiązane przed wdrożeniem AIDL.

Jeśli Twoje działania są w tym samym procesie co usługa, wystarczy rozszerzyć aplikację Binder.

Rozszerzanie klasy Binder

Jeśli usługa jest prywatna do własnej aplikacji i biegnie w tym samym procesie co klient (co jest powszechne), należy utworzyć interfejs rozszerzając Binder klasa i zwracająca instancję z instancji onBind(). Klient otrzymuje segregator i może go użyć do uzyskania dostępu bezpośrednio do publicznych metod dostępnych w implementacji Binder , a nawet w usłudze. Jest to preferowana technika, gdy twoja usługa jest jedynie pracownikiem działającym w tle dla twojej własnej aplikacji . Jedynym powodem, dla którego nie chcesz utworzyć swojego interfejsu, jest to, że twoja usługa jest używana przez inne aplikacje lub w oddzielnych procesach w ramach różnych .

Ta grafika dotyczące związany cykl serwisowy może pomóc w jaki sposób są wiążące/niewiążące (http://developer.android.com/guide/components/bound-services.html#Lifecycle):

enter image description here

Powiązane problemy