Tengo una pequeña aplicación de prueba en la que estoy trabajando que tiene un temporizador que actualiza una vista de texto a la cuenta regresiva de 100 a 0. Eso funciona bien, pero ahora estoy tratando de pausar la aplicación si el usuario presiona el botón Atrás en el teléfono y luego reinicia el temporizador desde donde lo dejaron cuando vuelven a abrir la aplicación. Aquí está el código que estoy utilizando:onPause/onResume actividad problemas
@Override
public void onPause()
{
if(this._timer_time_remaining > 0) {
this.timer.cancel();
}
super.onPause();
Log.v("Pausing", String.format("Pausing with %d", this._timer_time_remaining));
}
@Override
public void onResume()
{
Log.v("Resuming", String.format("Resuming with %d", this._timer_time_remaining));
if(this._timer_time_remaining > 0) {
start_timer(this._timer_time_remaining);
}
super.onResume();
}
El método start_timer() crea un countDownTimer que actualiza la Vista de Texto en el método onTick y actualiza la variable this._timer_time_remaining int.
countDownTimer y _timer_time_remaining se declararon tanto a nivel de clase como esta:
private CountDownTimer timer;
private int _timer_time_remaining;
Desde el Log.v() imprime veo que la variable _timer_time_remaining tiene el número correcto de segundos cuando se almacena onPause se llama, pero vuelve a 0 cuando se inicia OnResume. ¿Por qué se restablece la variable? Pensé que la aplicación continuaría ejecutándose en segundo plano con los mismos valores. ¿Me estoy perdiendo de algo? Todo esto se declara en una clase que amplía la Actividad.
¡Gracias de antemano!
Nota: Editado para limpiar el código copiado
Primero, gracias por la respuesta. Reemplacé mi método onPause con el método onSaveInstanceState (Bundle savedInstancestate), pero parece que no se llama cuando presiono el botón Atrás para salir de mi aplicación. Ninguno de mis mensajes de LogCat aparece, así que no creo que se llame. ¿Necesito onPause y onSaveInstanceState implementado? ¿O debería onSaveInstanceState manejarlo? – Blather
La documentación explica esto: "Un ejemplo de cuando se llama a OnPause() y onStop() y no a este método cuando un usuario regresa de la actividad B a la actividad A: no hay necesidad de invocar onSaveInstanceState (Bundle) en B porque una instancia particular nunca se restaurará, por lo que el sistema evita llamarlo ". Al presionar Atrás no se llama a SaveInstanceState, pero al presionar Home hace. –
Gracias por responder. Vi eso mencionado, pero si onSaveInstanceState no se llama cuando se presiona el botón Atrás, no solucionará mi problema, ¿o sí? Solo quiero que el temporizador de cuenta regresiva se detenga cuando se presiona el botón Atrás y luego reiniciar desde la misma ubicación cuando la aplicación se inicia nuevamente desde la pantalla de inicio. Puedo estar malentendiendo, pero no parece que esto logre eso. Gracias de nuevo por el tiempo que ha dedicado a ayudar hasta ahora, creo que me falta algo aquí. – Blather