Обработчик - postDelayed выполняется дважды - PullRequest
1 голос
/ 28 ноября 2011

Когда я использую Handler и его метод postDelayed, метод run () выполняется дважды.Ниже приведена часть моего кода.

Handler deneme = new Handler();

deneme.postDelayed(new Runnable() {

            @Override
            public void run()
            {
                randomOyna();
            }
        }, 1000);

, где randomOyna - это метод

public void randomOyna()
{   
    Log.v("sonOlarak", "çalıştı");
}

Я наблюдаю за LogCat и вижу, что запись "çalıştı" написана дважды, поэтому вызывается randomOynaдважды.Задача запланирована верно, но выполняется как через 1 с, так и через 2 с.

1 Ответ

0 голосов
/ 29 ноября 2011

Используйте этот класс и проверьте, запущен ли он уже первым:

public class Timer {

private java.util.Timer timer;

public synchronized void schedule(final TimerTask timerTask, long delay) {
    stop();
    timer=new java.util.Timer();
    timer.schedule(new TimerTask(){

        @Override
        public void run() {
            timerTask.run();
            timer = null;
        }},delay);
}

public synchronized void stop() {
    if(timer!=null) {
        timer.cancel();
        timer.purge();
        timer = null;
    }   
}

public synchronized void scheduleAtFixedRate(TimerTask timerTask, long delay, long period) {
    stop();
    timer=new java.util.Timer();
    timer.scheduleAtFixedRate(timerTask, delay, period);
}

public boolean isRunning() {
    return timer!=null;
}   

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...