2010-07-24 15 views
6

Esto es normal.onStop() no se llama cuando presiono el botón Atrás

Los documentos dicen

"El onStart() y onStop() métodos se pueden llamar varias veces, ya que los suplentes de actividad entre ser visible y oculta para el usuario"

Al pulsar el botón de retroceso y volverá a la actividad anterior que cubre totalmente la anterior.

¿Qué está pasando aquí?

+0

¿Puede mostrarnos un fragmento del código relevante que está utilizando para rastrear el método onStop? – Cristian

Respuesta

0

Desea onPause(), no onStop(). onStop se invoca justo antes de que se desestime la actividad, cuando el sistema tiene poca memoria. Se invoca a OnPause siempre que el usuario navega fuera de su actividad. Vea el diagrama al http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle.

+6

Gracias, en el diagrama dice "La actividad ya no está visible" y luego aparece OnStop(), entonces ¿qué significa "ya no visible"? Hubiera pensado que ir a una actividad ya no es visible. – jax

+0

Según entiendo, Android distingue entre "otra actividad en primer plano" (se llama a OnPause, pero su actividad continúa teniendo VM y funciona), y "la actividad ya no es visible porque está a punto de ser eliminada" (onStop, y más tarde, se llama a onDestroy). Entonces se llamará a OnPause cada vez que su actividad esté oculta, mientras que onStop se llama con menos frecuencia. Esta es solo mi opinión sobre las cosas, y probablemente sea algo inexacta, pero los documentos de Android dicen: "La vida útil en primer plano de una actividad ocurre entre una llamada a onResume hasta una llamada correspondiente a onPause". – QRohlf

+0

Qué puedo hacer si mi Actividad es para USO ÚNICO solamente Cómo salgo y dejo VM cada vez que se llama aPause ... vea mi pregunta en http://stackoverflow.com/questions/13928591/a-strange-behavior- of-android-activities-fragments-and-intention – aProgrammer

0

Si aún necesita que se les llame para su instancia de actividad cuando se crea una nueva instancia, puede usar this hacky solution. Simplemente implemente su lógica en #doStopOperation() y #doDestroyOperation() en lugar de #onStop() y #onDestroy() - y asegúrese de llamar a super # onStop() y super # onDestroy() desde sus métodos reemplazados. Obviamente, al extender esta actividad, no necesita extender AppCompatActivity, puede usar la actividad regular en su lugar. Esto funciona para mí en una versión de producción, así que espero que ayude.

Creo que se puede escribir un corte del temporizador, así invocar parada y destruir incluso cuando no se crea ninguna nueva instancia, pero eso depende de usted.

2

onStop() se llama cada vez que la actividad ya no es visible. Así que cuando se presiona el botón Atrás onStop() se llama realmente.

Comprobación fácil, - necesita poner puntos de interrupción en onStop()/onStart() devoluciones de llamada y ejecutar la sesión de depuración.

PERO tenga en cuenta que onStop() de la actividad actual muy probablemente se llamará después de onStart()/onResume() de la actividad a la que está cambiando.

Por lo tanto, creo que estabas intentando actualizar algo en onStop() de 1st Activity y esperabas obtener datos actualizados en onStart() de 2nd Activity que causaban errores.

Cuestiones relacionadas