Android Design - Service vs Thread per Networking

1

Sto scrivendo un'app per Android, infine (indicatemi) e per questa app ho bisogno di socket persistenti, ma chiudibili dall'utente, di rete (sì, più di una). Ho deciso di provare a scrivere la mia versione di un client IRC.

Tuttavia, il mio problema di progettazione è che non sono sicuro di come eseguire la connettività Socket stessa. Se metto le prese al livello di attività, continuano a chiudersi poco dopo che l'attività diventa non visibile (anche un problema che deve essere risolto ... ma penso di averlo capito) ... ma se eseguo un " servizio di connettività ", ho bisogno di scoprire se posso avere più istanze di esso in esecuzione (il servizio, cioè ... uno per server / socket). O quello o un ho bisogno di un modo per collegare i socket stessi e avere più thread in esecuzione che posso ancora comunicare direttamente (sistema di ID di qualche tipo).

Quindi la domanda: è un modello di progettazione "migliore", o almeno più "corretto", per mettere il Socket e la rete in un servizio, e fare in modo che le attività consumino detto servizio ... o dovrei legare le prese direttamente ad alcuni processi threaded posseduti dall'attività dell'interfaccia utente e non preoccuparsi affatto dell'implementazione del servizio? So che è meglio mettere la rete direttamente sul thread dell'interfaccia utente, ma è tutto ciò che sono riuscito a ottenere.

    
posta Nevyn 25.10.2013 - 15:00
fonte

2 risposte

3

La risposta è Service + Thread .

Non inserire socket in Activity . Il activity è per l'interfaccia utente. Viene ricreato quando l'utente ruota il telefono. È possibile incontrare problemi quando l'utente riceve una telefonata.

Metti le tue prese in Service . Le tue attività / attività possono associarsi a Service e utilizzarne i metodi. Oppure puoi utilizzare un Messenger per comunicare tra Activity e Service .

Services su Android eseguito nel thread dell'interfaccia utente, quindi in Service avrai bisogno del tuo thread per la comunicazione socket.

    
risposta data 01.07.2014 - 11:37
fonte
-1

Solo un suggerimento (qualcosa che non ho ancora provato con Android, ma dovrebbe funzionare).

Prova a mettere una WebView nella tua attività principale (in modo che non muoia quando cambi attività figlio) che include un documento DOM completo e un elemento iframe secondario. Imposta l'attributo src dell'iframe su un servizio di comete definito, con un'intestazione keep-alive. Spingi i messaggi usando la cometa. Funziona come un fascino in cromo. Se il tuo back-end non supporta la cometa, puoi impostarlo manualmente.

    
risposta data 06.02.2014 - 11:20
fonte

Leggi altre domande sui tag