我的问题可能是一个常见的要求。很遗憾没有在任何地方找到适当的指南。
我需要在Java中用软件设置超时。在我的设置中,我将鼠标连接到Android设备。
基本上我的Android应用程序有两种模式:ENGAGED和DISENGAGED 默认情况下,应用程序处于DISENGAGED模式 该应用程序在ENGAGED和DISENGAGED模式下显示不同的屏幕,可根据模式自动控制 现在要进入ENGAGED模式,用户需要左键单击鼠标。只要用户使用鼠标,应用程序就会保持在参与模式。如果用户未使用鼠标30秒,APP将返回DISENGAGED模式。
在软件中,我会收到用户执行的每次触摸的事件,显然,自上次触摸后30秒内我没有收到任何事件。因此,我需要一个适当的解决方案来回到脱离模式。
如何在软件中实现这一点?代码流的基本概要应该足够,不一定是精确的工作代码。我很习惯使用信号量,任务,互斥量等。
答案 0 :(得分:2)
您需要做的就是启动一个等待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();
答案 1 :(得分:0)
这不会有诀窍: System.currentTimeInMillis() API for currentTimeMillis()