我的问题可能是一个普遍的要求。不幸的是,在任何地方都找不到合适的指南。
我需要在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();