Come verificare se l'app è offline

3

Sto sviluppando app Android interne per la società per cui lavoro. In vari punti delle app ho bisogno di collegarmi a un server interno. Questo server è spento per manutenzione per un periodo di tempo ogni notte, quindi ci sono momenti in cui non è disponibile. Potrebbero inoltre esserci delle volte in cui la connessione wi-fi sul tablet scende.

Se un tablet non riesce a connettersi al server (a causa del fatto che il wi-fi è inattivo o perché il server è inattivo) Voglio che l'app funzioni in modalità offline, in pratica visualizza i dati dal database locale piuttosto che ottenere dati in tempo reale dal database del server. Inoltre, tutti i dati da caricare sul server devono essere messi in coda fino al ritorno online.

Sto considerando di avere un servizio in background che esegue un controllo ogni X secondi per vedere se il wi-fi è collegato e, in tal caso, controlla se il server è disponibile (tramite una richiesta HEAD HTTP). Avrebbe quindi inviato una trasmissione per dire se online o offline e altre app potevano ricevere questa trasmissione e salvare lo stato della connessione. Quindi, ogni volta che c'è un'attività nelle app che richiedono l'accesso al server, possono controllare prima lo stato e decidere come comportarsi.

Il lato negativo di questo è che il servizio sarebbe costantemente in esecuzione in background e potrebbe causare problemi di prestazioni / drenaggio della batteria, anche se avendo fatto un piccolo test non ho visto alcuna prova di questo ancora, quindi non so se in realtà sarebbe mai stato un problema.

Quindi quello che mi chiedo è se questo metodo è una buona idea o no e se c'è un modo migliore per verificare se online o offline.

    
posta omelette 09.06.2016 - 15:27
fonte

2 risposte

2

Stai lasciando le radio accese praticamente per tutto il tempo e questo senza dubbio consumerà la batteria.

Tuttavia, vedo la tua motivazione. Un compromesso accettabile è quello di presumere che l'app sia online a meno che non risulti essere. Se risulta non essere, e vorrebbe essere , quindi eseguire il polling per una connessione a intervalli lunghi, allungando col passare del tempo. 1 secondo, 5 secondi, 15 secondi, 1 minuto, 5 minuti, 15 minuti.

Inoltre, ogni volta che l'app - come risultato dell'attività dell'utente - tenta di connettersi al server, lascia che ci provi. Ciò manterrà il "sono online?" stato un po 'più fresco, e c'è un principio generale nel design delle app mobili che quando le radio vengono attivate perché l'utente le chiede, non è uno spreco di batteria.

Infine, se l'interfaccia utente è in grado di gestire una sorta di azione di aggiornamento (un pulsante o un'azione di pull-down), allora lascia che sia il tentativo di connessione.

Nota: iOS ha la possibilità per un'app di ricevere una notifica dal sistema operativo in merito a una modifica dello stato di connettività. Non so se c'è qualcosa di simile in Android. La cosa bella di questo è che il sistema operativo può decidere quando fare i suoi controlli di connettività (ad esempio, quando ha già le radio su qualcos'altro). Anche così, il monitoraggio della connettività viene eseguito solo quando è stato effettuato un tentativo di contattare il server e non è riuscito.

    
risposta data 09.06.2016 - 18:10
fonte
4

L'utilizzo di un servizio in background non ti sarà di grande aiuto. Il problema è che dopo un controllo accurato per wi-fi e server non puoi essere sicuro di essere ancora online mentre effettui la chiamata per ottenere i dati online perché potrebbero essere andati immediatamente offline dopo il controllo riuscito.

Un'alternativa migliore sarebbe semplicemente provare a ottenere i dati in tempo reale e se questo non funziona, usa i dati locali. Quindi hai sempre lo stesso flusso del tuo codice.

    
risposta data 09.06.2016 - 15:43
fonte

Leggi altre domande sui tag