Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


OnPause / onResume problemas de actividad

Tengo una pequeña aplicación de prueba en la que estoy trabajando, que tiene un temporizador que actualiza un textview 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 de atrás en el teléfono y luego Reinicie el temporizador desde donde lo dejaron cuando vuelven a abrir la aplicación. Aquí está el código que estoy usando:

@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 el textview en el método onTick y actualiza la variable int this._timer_time_remaining.

CountDownTimer y _timer_time_remaining se declaran en el nivel de clase de la siguiente manera:

 private CountDownTimer timer; private int _timer_time_remaining; 

Desde las impresiones Log.v () veo que la variable _timer_time_remaining tiene el número correcto de segundos almacenados cuando onPause se llama, pero se pone de nuevo a 0 cuando onResume se inicia. ¿Por qué se restablece la variable? Pensé que la aplicación continuaría funcionando en el fondo con los mismos valores. ¿Me estoy perdiendo de algo? Todo esto se declara en una clase que extiende Actividad.

¡Gracias por adelantado!

Nota: Editado para limpiar la copia del código

  • ¿Temporizador Android? ¿Cómo?
  • Hacer un temporizador de intervalo en Java android
  • Android: para medir el tiempo entre los dos clics de botón
  • Android - No puede eliminar la red Wifi de forma programática El método removeNetwork (int) en el tipo WifiManager no es aplicable a los argumentos (String)
  • Java - Timer.cancel () v / s TimerTask.cancel ()
  • Temporizador de TextView de Android
  • Temporizador en segundo plano
  • ¿Cuál es el enfoque más eficiente en cuanto a la batería de usar LocationClient para recibir actualizaciones periódicamente?
  • 5 Solutions collect form web for “OnPause / onResume problemas de actividad”

    Si echa un vistazo al diagrama del ciclo de vida de la actividad, se dará cuenta de que no hay garantías sobre usted. Actividad después de que se llame OnPause. Android podría matarte Actividad sin siquiera llamar a onDestroy. Tienes que guardar tu estado usando onSaveInstanceState y restaurarlo usando onRestoreInstanceState .

    Esto podría ser útil.

    EDITAR:

    El ciclo de vida cubre diferentes escenarios. Si sólo tiene una actividad, presionar Atrás es equivalente a salir de su aplicación. Si tiene Actividad A que inicia la actividad B entonces onSaveInstanceState se llama para la Actividad A. Al pulsar de nuevo en la Actividad B acaba de salir y onRestoreInstanceState se llama para la Actividad A. Está intentando guardar datos entre dos ejecuciones distintas de su aplicación y usted Necesidad de utilizar algún tipo de almacenamiento persistente para esto.

    Así es como guardaría el valor: (Cuatro líneas de código)

     SharedPreferences example = getSharedPreferences("example", MODE_PRIVATE); SharedPreferences.Editor edit = example.edit(); edit.putInt("time_remaining", (Integer)this._timer_time_remaining); edit.commit(); 

    En el curriculum vitae, haga esto: (Dos líneas de código)

     SharedPreferences example = getSharedPreferences("example", MODE_PRIVATE); int time_remaining = example.getInt("time_remaining", 0); 

    He adaptado esto de algunos de mi código de trabajo, pero en realidad no lo prueba en este formato exacto. Busque la documentación de SharedPreferences para saber cómo funciona.

    No soy un experto en Android, pero sólo digo de cómo espero que el temporizador se comporte

    this.timer.cancel() : – cancelaría el temporizador, pero no lo this.timer.cancel()

    start_timer(this._timer_time_remaining) : – podría "reiniciar" el temporizador, no continuar desde la última posición.

    Así que lo que ves es correcto. Cada vez que se empieza de nuevo. Averigüe cuál es la api para pausar el temporizador (si existe).

    Simplemente puede escribir el tiempo de espera en una base de datos o un archivo en onPause y volver a leerlo en onResume.

    También puede intentar escuchar las pulsaciones de teclas (onKeyDown ()) para interceptar el botón de retroceso y guardar sus datos en una tabla SQLite.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.