java - 处理程序 - postDelayed 执行两次

标签 java android scheduled-tasks handler postdelayed

当我使用 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 秒后执行。

最佳答案

改用这个类并检查它是否已经在运行:

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

关于java - 处理程序 - postDelayed 执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300048/

相关文章:

java - 识别 Java 应用程序在哪个监视器中运行

java - Dspace XMLUI 配置

java - Akka调度程序: How akka scheduler work?

Java/数据库项目自动化

windows - 修改系统生成的错误消息批处理文件

java - 性能: Inner Interface vs separate Interface class

java - 使用 Apache POI 设置日期格式

java - JSON 响应表示更新的变量为空

Android:服务startService或绑定(bind)服务

android - 在代码中抑制 API 级警告