¿Por qué onDestroy siempre se llama cuando regresa a la actividad de los padres?

Tengo una aplicación muy simple basada en el tutorial Building Your First App . Hay dos actividades: MainActivity invoca DisplayMessageActivity través de startActivity() .

Al entrar en DisplayMessageActivity , veo:

 MainActivity.onStop() 

Como se esperaba, pero cuando MainActivity el botón Atrás para volver a la principal MainActivity , obtengo:

 MainActivity.onDestroy() MainActivity.onCreate(null) MainActivity.onStart() 

La actividad siempre se destruye para esta aplicación muy simple. Pero de acuerdo con la documentación (segundo punto), el comportamiento típico es que la actividad sea detenida y reiniciada en tales casos.

Además, onDestroy() no ocurre cuando se inicia la actividad de los niños, pero sólo una vez se hace clic en el botón de retroceso.

Dos preguntas:

  1. ¿Existe alguna manera de evitar que los padres sean destruidos en el caso común?
  2. ¿Por qué se pasa null a onCreate() aquí? Esto me impide preservar el estado a través de onSaveInstanceState() .

Ten en cuenta que he comprobado que la opción Configuración -> Opciones de desarrollador -> Aplicaciones -> No mantener actividades está desactivada.

Editar:

A continuación, se muestra cómo la actividad del niño está vinculada al padre:

  <activity android:name="com.example.helloworld.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.helloworld.MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.helloworld.MainActivity" /> </activity> 

Rastreando a través de DisplayMessageActivity.onOptionsItemSelected() , puedo ver que está llamando a Activity.onNavigateUp() .

Gracias a los comentarios de Greg Giacovelli, encontré la respuesta aquí . La solución era establecer android:launchMode="singleTop" .

¡Todavía no puedo entender porqué tal información básica es tan desconocida y difícil de encontrar!

  • Nivel de aplicación onResume Android
  • ¿Cuándo puedo primero medir una vista?
  • Omitir correctamente la actividad de inicio de sesión si ya ha iniciado sesión
  • ¿Se puede reanudar una actividad de Android después de finalizar ()?
  • Diferencia entre onResume () y onResumeFragments ()
  • Cómo manejar AsyncTask onPostExecute cuando se pausan para evitar IllegalStateException
  • Android Fragment onCreateView vs. onActivityCreated
  • Distinguir entre presionar el botón "inicio" y abrir otra Actividad
  • DialogFragment - retención del oyente tras la rotación de la pantalla
  • Guardar el estado cuando se pulsa el botón Atrás
  • ¿Puede algunos dibujar el ciclo de vida de Fragment y su FragmentActivity padre?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.