Pregunta

Utilizo una única clase estática en mi código que define un campo estático que reutilizo entre las invocaciones de Activity onStop / onStart. Aquí hay un escenario:

  1. El usuario hace clic en " Autorizar " botón (los datos estáticos se inicializan)
  2. La actividad se detiene y se llama el navegador web
  3. El navegador ejecuta la devolución de llamada y la actividad se restaura (los datos estáticos se reutilizan)

Al menos uno de mis usuarios informa el error en el paso 3, que no puedo reproducir pero que parece ser el restablecimiento de datos estáticos

¿Alguna sugerencia?

¿Fue útil?

Solución

Eso no es seguro. Su proceso puede interrumpirse entre onStop y onStart, por lo que todos los datos estáticos desaparecerán. De hecho, su actividad incluso puede ser eliminada antes de que se detenga. En sus pruebas, el proceso no fue eliminado, pero fue para el usuario. Vea el ciclo de vida de la actividad de Android que tiene un buen diagrama de flujo mostrando las posibilidades.

Debe almacenar los datos de alguna otra manera, por ejemplo, en prefs o base de datos.

Otros consejos

Si estos datos estáticos están relacionados con la actividad que acaba de detener, podría usar campos no estáticos normales + el método onSaveInstanceState.

@Override
protected void onSaveInstanceState(Bundle outState) {
    // ... save your Serializable data here in outState bundle
    super.onSaveInstanceState(outState);
}

El caso sería:

  1. cierra su actividad y va al navegador (se invoca a onStop)
  2. el sistema mata el proceso de la aplicación (se invoca onSaveInstanceState donde guarda los datos)
  3. El usuario navega de nuevo a su actividad (onCreate se invoca con Parámetro savedInstanceState)

En la mayoría de los casos, el segundo punto no ocurrirá. El sistema puede pero no tiene que matar el proceso de tu aplicación. Cuando no lo haga, no obtendrá el método onCreate sino los métodos onStart y onResume y sus campos no cambiarán.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top