在软件中实现超时

时间:2014-01-15 20:25:18

标签: java android timeout

我的问题可能是一个常见的要求。很遗憾没有在任何地方找到适当的指南。

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

基本上我的Android应用程序有两种模式:ENGAGED和DISENGAGED 默认情况下,应用程序处于DISENGAGED模式 该应用程序在ENGAGED和DISENGAGED模式下显示不同的屏幕,可根据模式自动控制 现在要进入ENGAGED模式,用户需要左键单击鼠标。只要用户使用鼠标,应用程序就会保持在参与模式。如果用户未使用鼠标30秒,APP将返回DISENGAGED模式。

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

如何在软件中实现这一点?代码流的基本概要应该足够,不一定是精确的工作代码。我很习惯使用信号量,任务,互斥量等。

2 个答案:

答案 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()