2012-12-23 14 views
6

Ho un servizio che comunica tramite AIDL con altri servizi. Voglio che quel servizio sia vincolato dalle attività nella mia applicazione. Il servizio può definire due binder \ interfaces? Ho provato a utilizzare un messenger per comunicare con le attività, ignorando il metodo "onBind" in modo che restituisca un raccoglitore diverso in base all'intenzione che ottiene (uno per gli altri servizi e uno per le attività).un servizio Android può fornire due interfacce con cui comunicare?

Ma quando le attività (che utilizzano lo stesso raccoglitore) si separano dal servizio, ho un errore "myService ha fatto trapelare ServiceConnection ... che era originariamente rilegato qui", che credo sia relativo al raccoglitore utilizzato dal servizio per comunicare con gli altri servizi.
Se un servizio non può utilizzare due interfacce, come posso implementare la comunicazione tra le attività e quel servizio?

ringraziamento, -Liron

risposta

0

AIDL e Messenger sono utilizzati per IPC con altre applicazioni/processi. Dal Android API Guide:

Nota: Usando AIDL è necessaria solo se si consente clienti provenienti da diverse applicazioni per accedere al servizio per IPC e desidera gestire multithreading nel vostro servizio. Se non è necessario eseguire l'IPC simultaneo su diverse applicazioni, è necessario creare l'interfaccia implementando un Raccoglitore o, se si desidera eseguire IPC, ma non è necessario gestire il multithreading, implementare l'interfaccia utilizzando un Messenger. Indipendentemente da ciò, assicurati di aver compreso i Bound Services prima di implementare un AIDL.

Se le attività sono nello stesso processo del servizio, è necessario estendere Binder.

estensione della classe Binder

Se il servizio è riservato alla propria applicazione e viene eseguito nello stesso processo come il client (che è comune), è necessario creare l'interfaccia estendendo la Binder classe e restituendo un'istanza di da onBind(). Il client riceve il Raccoglitore e può usarlo per accedere direttamente ai metodi pubblici disponibili nell'implementazione di Binder o anche nel Servizio. Questa è la tecnica preferita quando il tuo servizio è semplicemente un lavoratore in background per la tua applicazione . L'unico motivo per cui non crei la tua interfaccia in questo modo è perché il tuo servizio è utilizzato da altre applicazioni o attraverso processi separati .

Questa grafica per quanto riguarda il ciclo di vita legato servizio può aiutare con il modo si sono vincolanti/non vincolante (http://developer.android.com/guide/components/bound-services.html#Lifecycle):

enter image description here

Problemi correlati