我的问题可能是一个普遍的要求。不幸的是,在任何地方都找不到合适的指南。

我需要在Java软件中设置超时。在我的设置中,我将鼠标连接至Android设备。

基本上,我的Android应用程序有两种模式:“已参与”和“已脱离”。
默认情况下,该应用程序处于“已分离”模式。
该应用程序在“啮合”和“脱离”模式下显示不同的屏幕,并根据该模式自动进行控制。
现在要进入“参与”模式,则要求用户执行鼠标左键单击。只要用户使用鼠标,该应用程序就会保持参与状态。如果用户在30秒钟内不使用鼠标,则APP将返回到“已脱离”模式。

在软件中,我会收到用户每次触摸的事件,很明显,自上次触摸以来经过30秒,我没有收到任何事件。因此,我需要一个适当的解决方案以返回到脱离模式。

如何在软件中实现这一点?代码流的基本轮廓应该足够,而不必是确切的工作代码。我很喜欢使用信号灯,任务,互斥锁等。

最佳答案

您需要做的就是启动一个简单的线程,该线程等待30秒,并在检测到鼠标移动时重置。

通常建议实现Runnable而不是扩展Thread,因为Java仅具有单一继承。这是一个应该可以运行的可运行私有类:

private static class CustomRunnable implements Runnable{
    @Override
    public void run() {
        boolean waiting = true;

        while(waiting){
            try {
                Thread.sleep(30000);
                waiting = false;
                // went 30 seconds with no interrupt - go to sleep mode
            } catch (InterruptedException e) {
                waiting = true;
                // we were interrupted by mouse movement - restart loop
            }
        }
    }
}


您可以使用以下方式启动线程

Thread sleepThread = new Thread(new CustomRunnable());
sleepThread.start();


您可以使用重置线程

sleepThread.interrupt();

07-24 09:26