2014-04-20 14 views

risposta

7

Ho bisogno di comunicare con un servizio remoto, utilizzando (greenrobot) EventBus.

L'intero punto di EventBus di GreenRobot, come Otto di Square e LocalBroadcastManager, non è usano per IPC.

Qualsiasi aiuto sarebbe apprezzato!

Non utilizzare EventBus di greenrobot per IPC. Utilizzare una delle innumerevoli meccanismi IPC di Android per IPC:

  • startActivity()
  • startActivityForResult()
  • startService()
  • bindService()
  • sendBroadcast() e le sue variazioni (ad esempio, sendOrderedBroadcast())
  • un ContentProvider
+0

Grazie per la risposta. Come ho detto, sto usando un "servizio remoto" e voglio che alcuni dati vengano comunicati a più app. Per ora le app dei consumatori stanno interrogando il produttore (usando AIDL); ma volevo renderlo asincrono. Ho preso un approccio sbagliato? – SlowAndSteady

+2

@Raj: usa "Intenti" di trasmissione per notificare alle app dei consumatori le modifiche. – CommonsWare

+2

Grazie ancora! Poiché Eventbus (greerobot) si afferma essere migliore del sistema di trasmissione Android (fare riferimento alle loro FAQ) - Mi chiedevo se supportano IPC. Sembra che non supportino, quindi ricollegherò alle trasmissioni. – SlowAndSteady

5

Esiste un'opzione EventBus IPC che consente di inviare eventi su IPC. https://github.com/NewtronLabs/IpcEventBus

Secondo la documentazione tutto ciò che dovete fare per ottenere un evento è questa:

public class Listener implements IIpcEventBusConnectionListener, IIpcEventBusObserver { 

    public Listener() { 
     String targetApp = "com.packagename"; 
     IIpcEventBusConnector connector = 
      ConnectorFactory.getInstance().buildConnector(context, this, targetApp); 
     connector.startConnection(); 
    } 

    @Override 
    public void onConnected(IIpcEventBusConnector connector) { 
     connector.registerObserver(this); 
    } 

    @Override 
    public void onEvent(IEventIpc event) { 
     Log.d("ipceventbus", "Received event: " + event.getClass()); 
    } 

    @Override 
    public void onDisconnected(IIpcEventBusConnector connector) { 

    } 
} 

E dall'altra parte si registra l'evento come questo:

IpcEventBus.getInstance().postEvent(new MyEvent()); 

Ho creato due app e sono state in grado di inviare gli eventi a vicenda.

0

Un'altra libreria che segue più da vicino la sintassi EventBus è HermesEventBus. Supporta IPC (e processo intra) entrambi.

Anche se dovrebbero essere derivati ​​da EventBus, in modo da poter semplicemente iniettare l'oggetto EventBus (che in realtà è un HermesEventBus) e non dover aggiornare il codice ovunque. https://github.com/eleme/HermesEventBus

Problemi correlati