Consulte el código que @Yuri publicó desde aquí. How to stop a timer after certain number of times. Si quería detenerlo debido a alguna condición y luego reiniciarlo nuevamente. ¿Cómo podría hacerlo?Pausa el temporizador y luego continúa
private final static int DELAY = 10000;
private final Handler handler = new Handler();
private final Timer timer = new Timer();
private final TimerTask task = new TimerTask() {
private int counter = 0;
public void run() {
handler.post(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, "test", Toast.LENGTH_SHORT).show();
}
});
if(++counter == 4) {
timer.cancel();
}
//do some stuff in my app
//restart the timer again
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer.schedule(task, DELAY, DELAY);
}
Esto es lo que he intentado, pero sigue chocando conmigo.
final int DELAY = 10000;
Timer timer;
MyTask task;
startManager Scanner;
Handler handler;
public class MyTask extends TimerTask {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
//do Stuff here
}
});
}
public class startManager {
public startManager() {
handler = new Handler();
timer = new Timer();
}
public void start() {
timer.schedule(task, 0, DELAY);
}
public void cancel() {
timer.cancel();
timer.purge();
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Scanner = new startManager();
//do some stuff
if (...)
Scanner.cancel()
//restart the timer and its task
Scanner=new startManager();
}
Intenté cancelarlo y luego crear un nuevo temporizador, pero todavía está bloqueando. ¿Puedes explicar por qué necesito el controlador? ¿Puedo sacarlo? En realidad, lo intenté primero sin el controlador. – jimmyC
Un controlador le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un hilo. Cada instancia de Handler está asociada con un único hilo y la cola de mensajes de ese hilo. Cuando crea un nuevo Manejador, está vinculado a la fila/cola de mensajes del subproceso que lo está creando. A partir de ese momento, entregará los mensajes y los ejecutables a esa cola de mensajes y los ejecutará a medida que salgan del mensaje. cola. – SALMAN
Me he encontrado con un problema en el que creo que está creando demasiados nuevos temporizadores cuando el anterior no se ha detenido por completo. Por ejemplo, cancelo un temporizador, pero si la tarea se está ejecutando, debe esperar hasta que finalice.Inmediatamente después de que lo cancele (en mi código), sin embargo (antes de que el temporizador anterior realmente haya terminado), inicio un nuevo startManager y crea un nuevo temporizador. ¿Hay alguna manera de garantizar que un temporizador no se inicie hasta que la tarea anterior haya dejado de ejecutarse por completo? – jimmyC