2010-07-24 14 views
6

È normale.onStop() non viene chiamato quando preme il pulsante Indietro

La documentazione dicono

"The onStart() e onStop() metodi possono essere chiamati più volte, come si alterna attività tra l'essere visibile e nascosta per l'utente"

quando si preme il pulsante Indietro e tornerà all'attività precedente che copre totalmente quella vecchia.

Cosa sta succedendo qui?

+0

Puoi mostrarci un frammento di codice pertinente che stai utilizzando per tracciare il metodo onStop? – Cristian

risposta

0

Si desidera onPause(), non onStop(). onStop viene chiamato appena prima che l'attività venga scaricata, quando il sistema ha poca memoria. onPause viene chiamato ogni volta che l'utente si allontana dalla tua attività. Vedere lo schema allo http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle.

+6

Grazie, nello schema dice "L'attività non è più visibile" e quindi si verifica onStop(), quindi cosa significa "non più visibile" allora? Avrei pensato che andare a un'attività significa non essere più visibile. – jax

+0

A mio parere, Android fa una distinzione tra "un'altra attività in primo piano" (viene chiamato onPause, ma l'attività continua ad avere una VM e funziona) e "l'attività non è più visibile perché sta per essere uccisa" (onStop, e successivamente, onDestroy viene chiamato). Quindi onPause verrà chiamato ogni volta che la tua attività è nascosta, immediatamente, mentre onStop viene chiamato meno spesso. Questa è solo la mia opinione sulle cose, ed è probabilmente un po 'imprecisa, ma i documenti di Android dicono "La vita in primo piano di un'attività avviene tra una chiamata a un risultato fino a una chiamata corrispondente a onPause." – QRohlf

+0

Cosa posso fare se la mia attività è solo per USO SINGOLO Come faccio ad uscire e lasciare VM ogni volta che viene chiamato onPause ... vedere la mia domanda su http://stackoverflow.com/questions/13928591/a-strange-behavior- di-android-activities-framments-and-intent – aProgrammer

0

Se è ancora necessario che vengano richiamati per l'istanza di attività quando viene creata una nuova istanza, è possibile utilizzare this hacky solution. Implementa la tua logica in #doStopOperation() e #doDestroyOperation() invece di #onStop() e #onDestroy() - e assicurati di chiamare super # onStop() e super # onDestroy() dai metodi sovrascritti. Ovviamente quando si estende questa attività, non è necessario estendere AppCompatActivity, è possibile invece utilizzare l'attività regolare. Questo funziona per me in una build di produzione, quindi spero che possa essere d'aiuto.

Credo che si potrebbe scrivere un hack timer e per invocare fermata e distruggere anche quando non viene creato nessun nuovo caso, ma che sta a voi.

2

onStop() viene chiamato ogni volta che l'attività non è più visibile. Quindi, quando viene premuto il pulsante Indietro, viene effettivamente chiamato onStop().

Controllo semplice, - necessario inserire i punti di interruzione nei callback onStop()/onStart() ed eseguire la sessione di debug.

MA nota che l'attività corrente sarà chiamata onStop() DOPO onStart()/onResume() di Attività a cui stai passando.

Quindi, penso che stavate cercando di aggiornare qualcosa in onStop() della 1a attività e ci aspettavamo di recuperare i dati aggiornati in onStart() della 2a attività che ha causato errori.

Problemi correlati