Ho cercato la soluzione del mio problema ma non sono riuscito a trovare una risposta adeguata.
Ho cercato di sviluppare un'applicazione Android con funzionalità di networking asincrone pesanti. Il problema è sincronizzare parti asincrone a un certo punto.
Quello che voglio fare è creare un servizio, scaricare grandi quantità di dati da diversi link, analizzarli non appena ottengo una risposta e infine mostrare loro SE l'attività è presente. Il servizio dovrebbe essere funzionale anche quando l'applicazione è chiusa e dovrebbe essere in grado di sincronizzarsi con le viste corrispondenti nell'attività. L'utente dovrebbe essere in pausa, interrompere o continuare le attività di rete dall'interno dell'attività. Inoltre, l'attività o il servizio possono esistere indipendentemente l'uno dall'altro.
Ho pensato di eseguire il buffering delle risposte di rete tramite un'implementazione della coda e la lettura da quel buffer quando l'attività è presente.
Un esempio di tali operazioni potrebbe essere l'applicazione uTorrent. Lascia una notifica mentre esegue il servizio e non appena lo tocchi, l'applicazione avvia un'attività e mostra la situazione dei torrent. Mi propongo di costruire una struttura simile.
I problemi:
-
L'attività può facilmente leggere da quel buffer, ma dopo, come farà a sapere che ci sono nuovi elementi nel buffer?
-
Come farà il servizio a sapere se l'applicazione viene interrotta durante la lettura del buffer o no?
-
Esiste una funzione GenerateSummary per i download completati, ma dove leggerà i dati completi dell'operazione di rete?
TL, DR: Qual è la migliore pratica durante l'esecuzione delle attività di rete con l'interfaccia utente indipendente coesistente per un'applicazione Android?