在Java中重新启动handler.postDelayed

在Java中重新启动handler.postDelayed,java,android,android-handler,Java,Android,Android Handler,我试图在调用OnCreate方法时运行处理程序。然后,我想取消处理程序,并在收到用户交互时再次调用它(重新启动处理程序) 我该怎么做 提前感谢您可以使用布尔对象,例如: @Override public void onUserInteraction() { Handler handler = new Handler(); handler.postDelayed(new Runnable () { public void run() { fi

我试图在调用OnCreate方法时运行处理程序。然后,我想取消处理程序,并在收到用户交互时再次调用它(重新启动处理程序)

我该怎么做


提前感谢

您可以使用布尔对象,例如:

@Override
public void onUserInteraction() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
            finish();
        }
    }, 5000);
    handler.removeCallbacks(null);
}
}

或者你可以做这样的东西:

@Override
public void onUserInteraction() {
    isStarted = true;
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
          if(isStarted){
            finish();
            }
         }
    }, 5000);

可以使用布尔对象,例如:

@Override
public void onUserInteraction() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
            finish();
        }
    }, 5000);
    handler.removeCallbacks(null);
}
}

或者你可以做这样的东西:

@Override
public void onUserInteraction() {
    isStarted = true;
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
          if(isStarted){
            finish();
            }
         }
    }, 5000);

将runnable和handler存储在字段中并重用它们

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        finish();
    }
};

public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 5000;

@Override
public void onUserInteraction() {
    restart();
}

public void start() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

public void stop() {
    myHandler.removeCallbacks(myRunnable);
}

public void restart() {
    myHandler.removeCallbacks(myRunnable);
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

将runnable和handler存储在字段中并重用它们

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        finish();
    }
};

public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 5000;

@Override
public void onUserInteraction() {
    restart();
}

public void start() {
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

public void stop() {
    myHandler.removeCallbacks(myRunnable);
}

public void restart() {
    myHandler.removeCallbacks(myRunnable);
    myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}

创建处理程序并将其引用保留为全局变量

Handler handler;
Runnable runnable = new Runnable () {
    public void run() {
        finish();
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    handler = new Handler();
    handler.postDelayed(runnable, 5000);
}

@Override
public void onUserInteraction() {
    handler.removeCallbacks(null);
    handler.postDelayed(runnable, 5000);
}
和用户交互

private Runnable runnable;
private Handler newHandler;

newHandler = new Handler();
runnable = new Runnable() {
    @Override
    public void run() {
        try {
            //update UI
            newHandler.postDelayed(runnable,100);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
newHandler.post(runnable);

创建处理程序并将其引用保留为全局变量

Handler handler;
Runnable runnable = new Runnable () {
    public void run() {
        finish();
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    handler = new Handler();
    handler.postDelayed(runnable, 5000);
}

@Override
public void onUserInteraction() {
    handler.removeCallbacks(null);
    handler.postDelayed(runnable, 5000);
}
和用户交互

private Runnable runnable;
private Handler newHandler;

newHandler = new Handler();
runnable = new Runnable() {
    @Override
    public void run() {
        try {
            //update UI
            newHandler.postDelayed(runnable,100);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
newHandler.post(runnable);

在我使用Handler的
removecallbacksandsessages(对象令牌)
方法之前,它对我不起作用

论科特林

@Override
public void onUserInteraction() {
    super.onUserInteraction();
   newHandler.removeCallbacks(runnable);
    //Do some task
    if(//task done){
     newHandler.postDelayed(runnable,100);
     }
}

在我使用Handler的
removecallbacksandsessages(对象令牌)
方法之前,它对我不起作用

论科特林

@Override
public void onUserInteraction() {
    super.onUserInteraction();
   newHandler.removeCallbacks(runnable);
    //Do some task
    if(//task done){
     newHandler.postDelayed(runnable,100);
     }
}

谢谢。这适用于触发处理程序代码,但是当我获得另一个用户交互时,我如何取消它并再次调用它呢?基本上,我希望在收到用户交互5秒后关闭应用程序,但如果在5秒之前还有其他交互,则计时器将重新开始为YouTunkyou编辑答案!(但我不需要启动或停止,所以我只使用了重新启动)谢谢。这适用于触发处理程序代码,但是当我获得另一个用户交互时,我如何取消它并再次调用它呢?基本上,我希望在收到用户交互5秒后关闭应用程序,但如果在5秒之前还有其他交互,则计时器将重新开始为YouTunkyou编辑答案!(但我不需要启动或停止,所以我只使用了restart)这部分工作正常,但是userinteraction不会取消名为oncreate的处理程序。这意味着即使用户正在与应用程序交互,应用程序也会在5秒钟后关闭app@hinch我抄了你的电话。尝试使用
handler.removeCallbacksAndMessages(null)这部分起作用,但是userinteraction不会取消名为oncreate的处理程序。这意味着即使用户正在与应用程序交互,应用程序也会在5秒钟后关闭app@hinch我抄了你的电话。尝试使用
handler.removeCallbacksAndMessages(null)它说newHandler和runnable没有被分配到哪里会出现错误?在开始或内部UserInteraction方法中?它的工作代码..应该可以正常工作,任何方式更新的代码..立即检查它说newHandler和runnable没有分配到哪里出现错误?在开始或内部UserInteraction方法中?它的工作代码..它应该可以正常工作,任何方式更新的代码..立即检查因为您使用kotlin检查因为您使用kotlin检查