2010-07-20 7 views
10

Sto cercando di raggiungere i seguenti obiettivi con Android:Android: come sapere quando una app entra o la modalità "background"?

  • quando l'applicazione è in background, un thread sondaggi un server ogni ora e poi per recuperare i dati e avvisa l'utente se sono disponibili nuovi dati. Sto usando un servizio per questo, bene.

  • quando l'app è in "attivo", ad esempio una delle sue attività è visibile, il polling dovrebbe interrompersi in quanto potrebbe interferire con altre azioni dell'utente.

Non capisco come rilevare la transizione tra l'uso "attivo" o "in background" dell'app. I metodi di attività onResume() non sembrano aiutare, in quanto un'attività può essere nascosta o visibile durante l'utilizzo "attivo" comunque. La mia comprensione è che l'app stessa non fa la differenza tra i 2 stati.
Può essere correlato alla pressione del pulsante HOME? C'è un altro modo per fare la distinzione?
Sto pensando a un equivalente del metodo delegato dell'app per iPhone applicationDidEnterBackground. È il modo giusto di pensare con Android? O dovrei usare un altro approccio?

Grazie.

+0

simile: http://stackoverflow.com/questions/3136187 – yanchenko

risposta

3

Ho intenzione di fare riferimento allo Activity Lifecycle. Tra onResume e il tuo Activity è 'attivo', cioè, è sullo schermo e l'utente può interagire con esso. Se viene chiamato il metodo della tua attività, è necessario presumere che non sia più "attivo" e che l'utente non possa più interagire con esso fino a quando non viene richiamato onResume. Se desideri monitorare questo nel tuo servizio, dovrai farlo manualmente.

Questo è probabilmente più facilmente raggiungibile chiamando un metodo nel servizio in Activity#onResume che incrementa un contatore o imposta un flag e in ripristina tale modifica. Se hai più attività allora probabilmente avrai bisogno di un contatore, probabilmente un AtomicInteger, e usalo per determinare quando riprendere il polling.

Probabilmente attenderei un po 'di tempo quando il contatore raggiunge 0, ricontrollare, e se è ancora 0 riprende il polling. Ciò spiegherebbe il divario tra lo di una attività e l'altro onResume.

+0

L'ho fatto infine solo sull'attività root: non appena l'attività root scompare innesca il servizio. A mano a mano che avanzo, faccio scattare un timer e quindi inizio il polling. Se l'attività di root viene nuovamente visualizzata prima della scadenza del timer, il servizio viene arrestato. Segnalo la risposta perché mi ha aiutato comunque, grazie. – user244129

+4

la risposta alla domanda non è data ... La domanda era: come riconosci l'intera APP in background e non solo un'attività –

Problemi correlati