Autore Topic: Servizio remoto accessibile da diverse applicazioni  (Letto 747 volte)

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Servizio remoto accessibile da diverse applicazioni
« il: 13 Marzo 2014, 06:29:13 CET »
0
Ciao a tutti, premesso che ho letto un paio di libri (Quello di Carli e Reto Meier) ma nessuno dei due mi ha soddisfatto molto nella descrizione di questo aspetto.... mi trovo a fronteggiare questa necessità:
Mi sono fatto un'idea che però vorrei che voi mi confermaste.

Ammettiamo per semplicità che io voglia creare un servizio che giri in background e che mi restituisca ciclicamente dei valori numerici... diciamo random da 1 a 10.
Questo servizio deve girare indipendentemente da tutto . Applicazioni o altri servizi. Quindi in un suo processo dedicato.

Dopo di ciò, voglio creare due applicazioni che accedano in concorrenza al valore numerico del servizio creato in precedenza e lo possano usare.

A questo punto mi sento di poter definire il servizio precedente come "Servizio remoto".
Quindi Servizio remoto gira su un suo processo dedicato ... Applicazione1 gira su un altro processo, e Applicazione2 gira su un altro processo ancora.

Devo fare comunicare in qualche modo i processi tra di loro. E a quanto ho capito lo posso fare con la IPC (inter process comunication) .

Se non erro, in android per fare ciò, posso usare AIDL.
AIDL posso considerlarla come un'interfaccia che mi permette di comunicare, attraverso la creazione automatica di uno STUB,  tra SERVER (Servizio remoto) e CLIENT (APP1 e APP2).

Se tutto ciò è corretto, qual'è la best practice per fare ciò, c'è qualche fonte dove avere un esempio concreto di questa cosa? Un libro che ne parli bene in dettaglio?

Grazie dell'attenzione e delle eventuali risposte  ;-)

iClaude

  • Visitatore
Re:Servizio remoto accessibile da diverse applicazioni
« Risposta #1 il: 14 Marzo 2014, 10:20:50 CET »
0
Se Sevice e client sono creati dallo stesso soggetto, cioè tu, il sistema più semplice ed immediato è usare una Binder Transaction (IBinder.transact()).
Se invece devi creare un Api che sia utilizzabile facilmente da terzi, allora devi usare l'Aidl o la classe Messenger che è più semplice.

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Servizio remoto accessibile da diverse applicazioni
« Risposta #2 il: 14 Marzo 2014, 10:39:17 CET »
0
Grazie, devi fare come la seconda che hai detto.

Quindi con AIDL .
Cos'è la classe Messenger? mi puoi dare qualcghe info in più?

iClaude

  • Visitatore
Re:Servizio remoto accessibile da diverse applicazioni
« Risposta #3 il: 14 Marzo 2014, 11:07:12 CET »
+1
La classe Messenger è molto più facile da utilizzare dell'AIDL, però le richieste dei client sono gestite in ordine sequenziale,  cioè nello stesso thread.
Se questo non è un problema,  allora è sicuramente preferibile all'Aidl, che utilizzerei solo come ultima ratio vista la complessità.
Non so qual è il tuo caso. ..

PS Eventualmente posso scannerizzare il paragrafo di un manuale con un esempio...
« Ultima modifica: 14 Marzo 2014, 12:54:46 CET da iClaude »

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Servizio remoto accessibile da diverse applicazioni
« Risposta #4 il: 22 Maggio 2014, 12:52:33 CEST »
0
Ciao, sono riuscito a far funzionare un esempio di AIDL,
Ho la mia applicazione "SERVER" (che fornisce i dati) e la mia aplicazione "CLIENT" che li consuma...
Ma mi è sembrato di capire che io posso solo richiedere dati dal "SERVER" verso il "CLIENT" e non viceversa...
E' corretta questa mia affermazione? oppure posso scambiare dati tra due applicazioni diverse, che girano su processi diversi in entrambe le direzioni?

Se non mi sono spiegato bene mi scuso. Spero che però il concetto che voglio esprimere sia chiaro.

iClaude

  • Visitatore
Re:Servizio remoto accessibile da diverse applicazioni
« Risposta #5 il: 27 Maggio 2014, 10:43:10 CEST »
0
Non si capisce la domanda: se tu "chiedi" dati al server stai già comunicando con esso nella direzione client --> server...