¿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:
- La onPause de la actividad y onResume que se llama después de comenzar, para ninguna razón
- Dejar la aplicación de Android con el botón Atrás
- Ejecutar código en el estado onPause () o onStop () de la actividad
- Android DialogFragment desaparece después del cambio de orientación
- ¿Cómo terminar la actividad de los padres de la actividad infantil sin terminar / detener la actividad infantil?
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:
- ¿Existe alguna manera de evitar que los padres sean destruidos en el caso común?
- ¿Por qué se pasa
null
aonCreate()
aquí? Esto me impide preservar el estado a través deonSaveInstanceState()
.
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()
.
- Mide la vista en el fragmento
- La aplicación se reinicia en lugar de continuar
- La aplicación se bloquea en rotación sin stackTrace
- Uso del servicio como singleton en Android
- ¿Por qué se definen los métodos del ciclo de vida en la clase de actividad con el especificador de acceso protegido
- OnDestroy () - para establecer o no establecer variables de instancia a null?
- Cómo "destruir" varias actividades de Android al mismo tiempo
- Ver ciclo de vida del paginador y del fragmento
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!
- Alarma de Android se cancela después de cerrar la aplicación
- WebView en CoordinatorLayout con CollapsingToolbarLayout