3

HandlerとそのpostDelayedメソッドを使用すると、run()メソッドが2回実行されます。以下は私のコードの一部です。

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ı」エントリが2回書き込まれているため、randomOynaが2回呼び出されていることがわかります。タスクは実際にスケジュールされていますが、1秒後と2秒後の両方で実行されます。

4

1 に答える 1

0

代わりにこのクラスを使用し、最初に既に実行されているかどうかを確認します。

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;
}   

}

于 2011-11-28T21:37:32.747 に答える