android - savedinstancestate - ciclo de vida onNewIntent() y oyentes registrados
onstart android example (2)
A OnNewIntent () siempre se le llama para las actividades de SingleTop / Task, excepto por primera vez cuando se crea una actividad. En ese momento se llama onCreate.
Puede invocar onNewIntent siempre poniéndolo en el método onCreate como
@Override
public void onCreate(Bundle savedState)
{
super.onCreate(savedState);
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
//code
}
Estoy usando una única Actividad superior para recibir intenciones de un cuadro de búsqueda a través de onNewIntent()
.
Lo que noté es que onPause()
se llama before onNewIntent()
, y luego llama onResume()
. Visualmente:
- diálogo de búsqueda iniciado
- intento de búsqueda disparado a la actividad
-
onPause()
-
onNewIntent()
-
onResume()
El problema es que tengo oyentes registrados en onResume()
que se eliminan en onPause()
, pero se necesitan dentro de la llamada onNewIntent()
. ¿Hay una forma estándar de hacer que esos oyentes estén disponibles?
onNewIntent()
se entiende como punto de entrada para actividades singleTop que ya se ejecutan en otro lugar de la pila y, por lo tanto, no pueden invocar onCreate()
. Desde el punto de vista del ciclo de vida de las actividades, por lo tanto, es necesario llamar a onPause()
antes de onNewIntent()
. Le sugiero que reescriba su actividad para no usar estos oyentes dentro de onNewIntent()
. Por ejemplo, la mayoría de las veces mis métodos onNewIntent()
simplemente se ven así:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// getIntent() should always return the most recent
setIntent(intent);
}
Con toda la lógica de configuración ocurriendo en onResume()
utilizando getIntent()
.