onrestart () viene chiamato quando il pulsante posteriore ha colpito, qualche modo per impedirlo?
Domanda
La mia applicazione chiama alcuni servizi Web quando è appena lanciato. Vorrei anche chiamare questi servizi Web se l'utente lancia l'app (che era in esecuzione in background) e riprende. Ho esaminato tutti i metodi licenziati quando vengono lanciate le app e quando le attività sono a fuoco. onstart (), onResume (), onRestart () ecc ....
Ho pensato che Onrestart sarebbe stata una buona scommessa per effettuare le mie chiamate di servizio web e aggiornare il mio punto di vista, il problema è se vado dall'attività A (quello che effettua le chiamate) all'attività B e premi il pulsante Indietro, l'attività A spara onrestart () e chiama i servizi Web. Non voglio che questo accada ogni volta che torno alla mia schermata principale da alcune attività nella mia app. Voglio solo che i servizi vengano chiamati se l'attività della mia app A viene messa a fuoco dall'esterno. Sono i loro altri eventi di cui dovrei essere consapevole che potrebbero aiutarmi? Se prendo il pulsante Home e quindi premo l'icona della mia app dovrebbe aggiornare, ma non se faccio clic su qualcosa sulla mia schermata, aprendo una nuova attività e quindi premo il pulsante Indietro.
Spero che la domanda abbia senso.
Grazie.
Soluzione
Secondo il Ciclo di vita delle attività, onRestart
verrà chiamato prima onResume
. Quindi, se inserisci le tue chiamate web onResume
, verrà chiamato quando l'attività inizia per la prima volta e ogni volta che riprende. onRestart
viene chiamato solo quando l'utente torna a tale attività. Quindi puoi avere un booleano nella tua attività (es. Booleano iSactivityRestarting) che è impostato su False, quindi impostato su True in onRestart
. Se è vero quando onResume
viene colpito, quindi non fare le tue chiamate web.
Codice di esempio:
public void onRestart() {
isActivityRestarting = true;
}
public void onResume() {
if (!isActivityRestarting) {
executeWebCalls();
}
isActivityRestarting = false;
}
Altri suggerimenti
Bene onCreate
è la tua scommessa migliore, ma con un po 'di avvertimento. (Schermata principale ecco lo schermo che chiama WebService)
- Se l'utente preme il pulsante schiena nella schermata principale,
onCreate
verrà chiamato. - Se l'utente preme il pulsante schiena sull'altra schermata e ritorna alla schermata principale,
onCreate
non verrà chiamato. - Se l'utente esce dalla schermata principale utilizzando il pulsante Home e ritorna a lungo premendo il pulsante Home e scegliendo la tua app,
onCreate
non è chiamato.
Fin qui tutto bene, ecco la cattura.
- Se l'utente preme il pulsante Home per uscire e poi va all'icona di avvio, il
onCreate
non è chiamato. Teoricamente è un comportamento coerente, ma potrebbe sembrare strano poiché l'utente potrebbe pensare che stia lanciando un'app dall'inizio a dimenticare come è uscito inizialmente.
Al tuo Ans, Oncreate è la strada da percorrere con lievi controlli.
Soln se si utilizza onStart
o onRestart
:
Un controllo che puoi fare è archiviare il timestamp nelle preferenze condivise, che corrisponde a quando hai chiamato i servizi Web. Ora, quando l'utente è uscito (a casa o indietro) e torna, puoi controllare l'ora e confrontarlo con il tempo memorizzato. Se la differenza è alta, fai semplicemente la chiamata WebService. Per fare questo lavoro che devi usare onStart
o onRestart
.
Poiché questo è un comportamento normale (vedi http://developer.android.com/reference/android/app/activity.html#ctitylifecycle) Consiglierei di non cercare di lavorare contro di esso, ma piuttosto di lavorare con i metodi del ciclo di vita.
La tua app viene portata a concentrarsi dall'esterno, sia da quest'altra attività che in altro modo.
Forse dovresti chiamare i servizi onCreate
?