2013-10-24 12 views
10

Ho intenzione di servizio nella mia app. Questo servizio ha un lavoro da fare: caricare alcuni file. Funziona solo quando c'è qualcosa da fare.Keeping alive Intent Servizio dopo l'uccisione dell'applicazione

Il servizio non verrà caricato quando si verificano alcune condizioni, ad esempio nessuna connessione Internet. Per questo motivo si registra sul ricevitore broadcast per ricevere messaggi sulle modifiche alla connessione Internet.

Il problema è che il servizio viene ucciso con applicazione anche se si sta facendo qualcosa, per esempio:

  1. App sta inviando l'intenzione di riparare
  2. servizio ha iniziato a caricare qualcosa, tutto bene
  3. X% caricato, l'applicazione viene uccisa, il servizio viene ucciso
  4. Connessione Internet cambiata - il servizio è attivo.

Se il servizio viene riattivato dopo che l'app viene uccisa, perché viene ucciso con l'app? C'è un modo per prevenire il servizio di omicidio quando l'app viene uccisa?

Sto uccidendo l'app manualmente. So che Android potrebbe uccidere il mio servizio in qualsiasi momento e non voglio impedirlo. Voglio solo far funzionare questo servizio dopo che l'utente ha chiuso o ucciso l'app.

+0

Cosa intendi con "uccisione" della tua app? –

+2

@StefandeBruijn È difficile dirlo. Quello che ho fatto è stato usare la schermata iniziale per mostrare l'app in esecuzione e quindi spostare la mia app. Voglio mantenere vivo il mio servizio se è possibile. Penso che sia stato possibile, perché Android ha svegliato il mio servizio sul ricevitore broadcast. – Ari

+0

hai trovato la risposta del tuo problema @Ari –

risposta

1

Poiché si è utilizzato un intentService che indica l'intentoService distruggerà una volta che l'attività distrugge quindi è necessario utilizzare Servizio anziché intentService, in modo da poter eseguire il backup del file nel backgroud.

In base alla manipolazione tra il servizio e l'attività tramite ricevitore broadcast o per associare il servizio all'attivazione.

Edit:

Il servizio può essere attivato da qualsiasi thread.

L'IntentService deve essere attivato dal thread principale.

+0

servizio intento è migliore di servizio per me e non è un problema che è servizio intento – Ari

+0

IntentService distruggere una volta che si distrugge la MainThread – Basbous

+0

ma è sempre tornato in vita in caso di evento ricevitore trasmissione – Ari

1

"Funziona solo quando c'è qualcosa da fare." solo in teoria :) - forse sei tu quello che vuoi raggiungere.

"Il problema è che il servizio viene ucciso con l'app anche se sta facendo qualcosa, ad esempio:" Naturalmente, ci saranno casi in cui l'azione dell'utente terminerà il servizio o il servizio Intent. This è una risposta di errore.

"C'è un modo per prevenire il servizio di omicidio quando l'app viene uccisa?" È solo da guardare per "parental control" protezione parole chiave in Google!

0

Se non ti dispiace mostrare la notifica (nel tuo caso, puoi ad esempio mostrare la notifica con l'avanzamento del caricamento), quindi nel tuo IntentService (o service) è possibile chiamare:

startForeground (int id, la notifica di notifica)

Questo dovrebbe evitare che uccidere il vostro servizio quando l'applicazione viene ucciso.

Dalla documentazione: "È possibile impostare questo flag se uccidere il servizio sarebbe di disturbo per l'utente, ad esempio se il servizio sta eseguendo la riproduzione di musica di sottofondo, quindi l'utente noterebbe se la loro musica ha smesso di suonare."

Problemi correlati