Gradirei alcune indicazioni su come affrontare il SO uccidendo un servizio a lungo termine.La migliore architettura per un servizio di lunga durata su Android
scenario di business:
applicazione registra un brano BTT che può durare per diverse ore. Può anche mostrare la traccia sulla mappa insieme alle statistiche pertinenti.
L'interfaccia utente dell'applicazione consente all'utente di avviare/interrompere la registrazione della traccia e visualizzare la traccia in tempo reale su una mappa.
Dopo l'avvio della registrazione, l'utente può uscire dall'applicazione e disattivare lo schermo (per risparmiare energia), e solo un servizio rimarrà in esecuzione per mantenere l'aggiornamento della registrazione nel database (notifica mostrata), finché l'utente non riavvia l'attività e chiedere la registrazione stop, che si traduce in interruzione del servizio.
Problema:
Dopo un tempo variabile, che va da 40 minuti a 1 ora e mezza, il servizio di registrazione viene ucciso senza alcun preavviso. Poiché le uscite BTT possono richiedere diverse ore, questo risultato risulta incompleto nella registrazione della traccia.
Alcune informazioni aggiuntive:
servizio viene avviato con START_STICKY
e acquista un PARTIAL_WAKE_LOCK
, e viene eseguito nello stesso processo come l'attività principale.
Nuove posizioni vengono acquisite (e registrate) a una velocità definita dall'utente da 1 secondo a diversi minuti. So dalla documentazione di Android che questo è il comportamento del sistema operativo previsto per servizi a lunga esecuzione.
Domanda:
Qual è il miglior approccio di progettazione dell'architettura di avere un'applicazione ben educati che potesse soddisfare le esigenze dello scenario di business?
mi viene in mente un paio di opzioni (e non mi piace nessuno di loro), ma vorrei una guida da qualcuno come hanno già affrontato e risolto problema simile:
- ricevitore Usa broadcast (idealmente collegato a Location Manager se è possibile) per far funzionare il servizio solo quando viene acquisita una nuova posizione ?
- Non consentire all'utente di abbandonare l'attività principale (con conseguente esperienza utente)?
- Avere un ricevitore di trasmissione allarme che riavvia il servizio se necessario?
Grazie a tutti coloro che potrebbero condividere un po 'di saggezza su questo argomento.
Grazie Michael. Vado a testarlo e ti farò sapere il risultato. – Luis
Ha funzionato per ore senza fermarsi. È risolto :-) Grazie a Michael. – Luis
Felice di aiutare! – Michael