2011-09-29 4 views
8

Guardato la documentazione di Android e sembra che non abbiamo la possibilità di sapere quando un'app si spegne. Che sia stato esplicitamente dall'utente o automaticamente dal sistema operativo.È possibile tenere traccia di quando un'applicazione Android è stata chiusa?

Di seguito è riportato lo onTerminate() documentation che è disponibile solo nello scenario emulato.

public void onTerminate() 

dal: API livello 1

Questo metodo è per l'uso in emulati processo ambienti. Non verrà mai chiamato su un dispositivo Android di produzione, , in cui i processi vengono rimossi semplicemente eliminandoli; nessun codice utente (incluso questo callback) viene eseguito quando lo si fa.

Qualcuno ha qualche altri approcci per riferire quando l'utente chiude l'applicazione?

Abbiamo bisogno di sapere da un punto di vista pilota/usabilità se abbiamo bisogno di incorporare funzionalità aggiuntive nella nostra futura app di produzione.

+0

Se si potesse dare un'idea di ciò che si vuole fare quando l'applicazione viene "terminata", potremmo essere in grado di suggerire alcune idee su come realizzarlo. –

+0

Fondamentalmente, vorrei solo inviare una richiesta di "fire-forget" alla nostra infrastruttura interna per farci sapere che stava accadendo. Niente di più veramente. Conoscere la frequenza di questo evento potrebbe influenzare la direzione del nostro prodotto in futuro. –

+1

Anche se non esiste una API specifica per sapere che la tua app è stata uccisa dal sistema o dall'utente ci sono molte API che possono dirti parzialmente cosa succede con la tua app a volte: Se controlli isFinishing() all'interno del metodo onDestory puoi vedere se l'attività è chiuso a causa di finish() o altri motivi (ad es. pulizia). Inoltre è possibile utilizzare il servizio per tenere traccia se un'attività dell'utente viene rimossa dall'utente (ad esempio rimuovendo l'attività da recents) ascoltando il suo metodo onTaskRemoved(). – MikeL

risposta

5

Non è sicuro se questo sta per aiutarvi ...

Nella mia app, sto usando Activity.onDestroy() di fare la pulizia che ho bisogno. Ho un paio di attività - e ho onDestroy() in ognuna di esse.

Questa è la cosa più vicina a cui ho potuto fare ciò che mi serviva - e in realtà funziona abbastanza bene.

+3

Apprezzare la risposta, questo approccio sembra raccogliere le richieste indesiderate. Ad esempio, quando l'app è stata messa in background e il sistema operativo cerca lo spazio. Potrebbero potenzialmente sbarazzarsi delle istanze di attività nello stack della storia che invocheranno i loro onDestroy (s). A meno che non ci siano altre condizioni che stai verificando in questo caso? –

+0

Non faccio nessun controllo speciale. In onDestroy() salverò lo stato dell'attività e poi in onCreate() ripristinerà quello stato. Mentre questo funziona bene per la mia app, apprezzo che le tue esigenze potrebbero essere diverse. –

+0

onDestroy funzionerà in modo definitivo. ma voglio monitorare l'evento di chiusura dell'applicazione come quando rimuoviamo l'applicazione dallo stack di applicazioni o il dispositivo si spegnerà a causa della batteria della legge. c'è qualche soluzione? –

3

Guardato la documentazione di Android e sembra che non abbiamo la possibilità di sapere quando un'app si spegne. Che sia stato esplicitamente dall'utente o automaticamente dal sistema operativo.

Gli utenti non chiudono le applicazioni su Android.

Qualcuno ha qualche altri approcci per riferire quando l'utente chiude l'applicazione.

Gli utenti non chiudono le applicazioni su Android.

Android, a questo proposito, si comporta come un browser Web. Gli utenti non chiudono le applicazioni Web nei browser Web. Potrebbero chiudere il browser. Potrebbero chiudere una scheda. Potrebbero premere il pulsante Home e accedere a un altro sito/app. Potrebbero scegliere un segnalibro e navigare verso un diverso sito/app. Potrebbero trascinare un documento nel browser e visualizzarlo. Potrebbero fare doppio clic sull'icona di un desktop e visualizzarlo. E potrebbero fare clic su un collegamento "logout" nel sito Web/app attualmente visualizzato. Ognuno di questi fa sì che l'utente lasci qualsiasi sito Web/app in cui si trova, ma nessuno di questi sarebbe interpretato come "chiudendo" il sito Web/l'app nello stesso modo in cui il clic sul pulsante di chiusura su una finestra del desktop OS potrebbe essere interpretato come "chiudere" l'app desktop.

Come note @Aleks G, esistono vari metodi per il ciclo di vita che è possibile ignorare per scoprire cosa l'utente sta facendo rispetto a un'attività. onStop() indica che qualcos'altro ha rilevato l'input in primo piano e che l'attività corrente non è più visibile. onUserLeaveHint() indica che l'utente ha premuto HOME. E così via. Ma quelli sono a livello di attività, non a livello di applicazione.

+3

Uccidere un'applicazione tramite un'app di gestione attività, sarebbe uno scenario in cui l'utente chiude un'applicazione. –

+2

@DevanDanger: non ti viene notificato quando un utente uccide un'app tramite un task manager, né quando un utente interrompe forzatamente un'applicazione tramite la schermata Gestisci servizi in Impostazioni. – CommonsWare

+6

corretto. "un utente uccide un'applicazione tramite un task manager" uguale "l'utente chiude l'applicazione" Questo è tutto ciò che sto dicendo, gli utenti chiudono le applicazioni. Detto questo, mi stavo chiedendo se ci fosse comunque che possiamo tenere traccia di ciò che sta accadendo. Mi dispiace per la direzione sbagliata. –

0

Crea un'attività di base che estende l'attività nell'applicazione e estende questa BaseActivity anziché Activity. In questa BaseActivity si sovrascrive il metodo onDestroy(). Come

@Override 
protected void onDestroy() { 
     super.onDestroy(); 
    //Write the code that you want to do if the application terminates 
}