onDestroy () se llama cuando se presiona el botón de retroceso

En mi actividad, he onDestory() y sólo poner una llamada de registro para mostrar si este método se está llamando. (probado en Android 4.2.2 y 4.4.4)

 @Override protected void onDestroy() { Log.i(TAG, "onDestroy() was called"); super.onDestroy(); } 

Cuando presiono el botón de regreso, este método se llama (vi el registro).

Creo que esto no debería suceder a menos que el teléfono tenga poca memoria o algo. No tengo mucho en la aplicación, pero la MainActivity y algunos fragmentos.

Aquí está el registro cuando el usuario está en la MainActivity y presiona el botón Atrás:

 I/MainActivity? onBackPressed() was called I/MainActivity? onStop() was called I/MainActivity? onDestroy() was called 

¿Por qué sucede esto?

También revisé isFinishing() en la onPause() y siempre devuelve true

Desde el Javadoc:

Realice cualquier limpieza final antes de destruir una actividad. Esto puede suceder ya sea porque la actividad está terminando (alguien terminó en ella o porque el sistema está destruyendo temporalmente esta instancia de la actividad para ahorrar espacio). Puede distinguir estos dos escenarios con el método isFinishing. este método se llama como un lugar para guardar datos!

Al pulsar el botón Atrás dentro de una Activity , llamará a finish() , que lo "cerrará".

Actividad.java

 /** * Called when the activity has detected the user's press of the back * key. The default implementation simply finishes the current activity, * but you can override this to do whatever you want. */ public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } } 

Cuando sucede, onDestroy() puede (y usualmente será) llamado.

protected void onDestroy ()

Realice cualquier limpieza final antes de destruir una actividad. Esto puede suceder ya sea porque la actividad está terminando ( alguien llamó finish () o porque el sistema está destruyendo temporalmente esta instancia de la actividad para ahorrar espacio. Puede distinguir estos dos escenarios con el método isFinishing ().

La misma razón también va a por qué poner isFinishing() en onPause() siempre devuelve true , si presionas el botón back (call finish() ) . No devolverá true si ocultas la Activity con otro método, por ejemplo, presionando el botón de inicio.

  • Cómo iniciar una nueva actividad al hacer clic en el botón
  • Cuándo guardar los datos en la base de datos, onPause () o onStop ()?
  • En Activity.onCreate (), ¿por qué Intent.getExtras () a veces devuelve null?
  • Ciclo de vida de Android que el evento disparó sólo una vez durante el ciclo de vida?
  • ANDROID: Estado de actividad después de pulsar el botón de retroceso
  • Nexus 5 va a modo de espera hace ciclo de vida de actividad buggy
  • ¿Puede Android matar a mi aplicación mientras está en medio de una ejecución de bucle?
  • Android onStop () no se llama al iniciar una nueva actividad en modo multi-ventana
  • Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
  • ¿Es realmente necesario RoboSpice shouldStop ()?
  • IllegalArgumentException cuando se utiliza Otto con un fragmento retenido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.