onrestart () viene chiamato quando il pulsante posteriore ha colpito, qualche modo per impedirlo?

StackOverflow https://stackoverflow.com/questions/8390112

  •  28-10-2019
  •  | 
  •  

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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top