android - work - Cómo pausar y reanudar una tarea de temporizador/temporizador
work timer (2)
Así es como lo hice. Agregue pauseTimer boolean donde sea que tenga lugar la pausa (quizás para el oyente del botón) y no cuente el temporizador si es verdadero.
private void timer (){
Timer timer = new Timer();
tv_timer = (TextView) findViewById(R.id.tv_locationTimer);
countTimer = 0;
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
String s_time = String.format("%02d:%02d:%02d",
countTimer / 3600,
(countTimer % 3600) / 60,
countTimer % 60);
tv_timer.setText(s_time);
if (!pauseTimer) countTimer++;
}
});
}
}, 1000, 1000);
}
Tengo una animación en mi aplicación de Android que muestra un flash de colores de TextView. He utilizado un método TimerTask, Timer y Runnable para implementar esto. Lo que debo hacer es detener el hilo cuando un usuario deja la aplicación durante esta animación en onPause (), y reanudar el hilo cuando el usuario vuelve a la aplicación en onResume (). El siguiente es el código que he implementado, pero no funciona (las piezas onPause () y onResume ()), y no entiendo por qué. He leído algunas otras publicaciones sobre asuntos similares, pero no me han ayudado a averiguar qué hacer en mi situación. He leído que las Tareas de Timer están desactualizadas, y probablemente debería usar un método ExecutorService; No me queda claro cómo implementar esta función.
...timerStep5 = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (b5) {
cashButton2SignalText.setBackgroundColor(Color.RED);
cashButton2SignalText.setTextColor(Color.WHITE);
b5=false;
} else {
cashButton2SignalText.setBackgroundColor(Color.WHITE);
cashButton2SignalText.setTextColor(Color.RED);
b5=true;
}
}
});
}
};
timer5.schedule(timerStep5,250,250);
}
public void onPause(){
super.onPause();
timerStep5.cancel();
}
public void onResume(){
super.onResume();
timerStep5.run();
}
Después de cancelar TimerTask
, no se puede ejecutar de nuevo, debe crear una nueva instancia.
Lea los detalles aquí:
https://.com/a/2098678/727768
Se recomienda ScheduledThreadPoolExecutor
para el código más reciente, ya que maneja los casos, como las excepciones, y la tarea lleva más tiempo que el intervalo programado.
Pero para tu tarea, TimerTask
debería ser suficiente.