Attività Android e sincronizzazione dei servizi

0

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?

    
posta Goktay Kaykusuz 01.08.2016 - 13:33
fonte

1 risposta

1

Per mantenere il servizio sempre attivo anche se l'attività è stata chiusa, hai avviato il servizio come primo piano. Questo lascia una notifica in cima. Ora leghi il tuo servizio alla tua attività quando l'attività è visibile e non vincolata alla chiusura dell'attività. In questo modo, avrai sempre il pieno controllo del tuo servizio.

Per avviare in primo piano

@Override
public void onCreate() {
    super.onCreate();
    Notification.Builder builder = new Notification.Builder(this);
    builder.setContentTitle("Launcher");
    Notification notification = builder.build();
    startForeground(545, notification);
}

Per legare il tuo servizio alla tua attività Leggi questa pagina per l'esempio di bind del servizio link

    
risposta data 29.08.2016 - 21:56
fonte