Il modo migliore per il servizio che inizia Attività di comunicare con esso

StackOverflow https://stackoverflow.com/questions/2274641

  •  20-09-2019
  •  | 
  •  

Domanda

Ho un servizio che ascolta un socket. Quando riceve certo ingresso è creando un'attività. Quando si riceve un altro ingresso, che è quello di uccidere questa attività. Ho lottato per un po 'per rendere il servizio di comunicare con l'attività attraverso AIDL ( http : //developer.android.com/guide/developing/tools/aidl.html ), ma questo sembra non essere efficace. Credo AIDL è efficace solo quando il processo che deve essere parlato è un servizio, non quando si tratta di un'attività? Mi piacerebbe alcune direzioni o suggerimenti su come risolvere il mio problema.

Saluti,

È stato utile?

Soluzione

  

Ho un servizio che ascolta un   zoccolo. Quando riceve certi input   che è quello di creare un'attività.

Si prega di fare questa configurabile. I servizi non devono essere iniziando le attività se non in molto circostanze insolite (ad esempio, la presa è una connessione SIP e si sta creando un client VOIP). Popping un'attività interrompe l'utente in quello che stanno facendo.

  

Quando si riceve altro ingresso, è di   uccidere questa attività.

L'unico scenario che ho visto in cui si tratta di un modello valido che respinge lo schermata della chiamata quando l'altra parte riaggancia la linea. Se si sta creando un client VOIP, il vostro modello proposto dovrebbe essere OK, ma per il resto, si prega di riconsiderare avendo l'attività svanire nel mezzo del l'utente utilizza.

  

Credo AIDL è efficace solo quando   il processo che deve essere parlato è   un servizio, non quando si tratta di un'attività?

No, funziona nella direzione opposta troppo, ma di solito solo se l'attività è quello di avviare il servizio e vincolante ad esso. Ancora più importante, AIDL è solo per la comunicazione tra processi.

  

Mi piacerebbe alcune direzioni o   suggerimenti su come risolvere il mio   problema.

Non hai veramente fornito sufficienti informazioni sulla natura della comunicazione per dare una risposta esauriente. Che cosa, esattamente, è il servizio cercando di dire l'attività? È l'attività anche cercando di comunicare con il servizio?

Il modello raccomandato per la comunicazione in corso da un'attività ad un servizio è quello di utilizzare il modello di legame locale. Troverete un esempio di questo nei vostri campioni SDK, e si può trovare un qui pure.

Il servizio ha quindi opzioni per comunicare al client: tramite un callback (ad esempio, il Handler nella risposta fornita dal Sig Smiljanić) o tramite la trasmissione Intents. Nel caso della richiamata, l'attività avrebbe bisogno di legarsi al servizio, al fine di ottenere l'accesso a un API per fornire l'oggetto callback. Il servizio sarebbe poi tenere su tale oggetto e chiamare metodi su di esso durante gli eventi chiave.

Se il servizio sta facendo il suo lavoro principale di un thread in background, è necessario garantire che le operazioni di interfaccia utente vengono eseguite sul thread dell'interfaccia utente. Il Handler è un approccio a questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top