¿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:
- Cómo administrar el estado de la interfaz de usuario y la pila posterior en un diseño de panel único / dual
- Ciclo de vida del fragmento AppCompat cambiado
- ¿Cuál es el orden correcto de llamar métodos de superclase en los métodos onPause, onStop y onDestroy? ¿y por qué?
- Diferencia entre onPause y onStop ()
- Evitar que la actividad sea destruida tanto como sea posible
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()
.
- ¿Es posible que un método de devolución de llamada se llame después de onDestroy?
- ¿Cuál es el equivalente del ciclo de vida de la actividad en iOS?
- Actividad con servicio duradero en el fondo que no se matará
- ¿Debe la llamada al método de superclase ser la primera instrucción?
- Evitar que el diálogo se abra varias veces al reanudar la actividad
- Ciclo de vida de android onActivityResult vs onStop
- LocalBroadcastManager y el ciclo de vida de la actividad
- ¿Cómo comprobar si la actividad es visible? OnResume no es suficiente
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