Android计时器延迟和重置

时间:2015-11-05 15:00:52

标签: android timer postdelayed

我确定这里有一个类似的问题,但我似乎无法找到它。

这是我想要做的事情。

让我们说我已连接到服务器,如果用户在最近5分钟内未进行任何呼叫,我想断开它。但是,即使只进行一次通话,5分钟的计时器也会重置,倒计时5会重新开始..

看起来很简单,但我对Android有点新意,并试图解决问题..

提前感谢!

=======编辑

所以这里是我想要做的代码的一个例子。

try {
    client.publish(topic, message);
    success = true;

    if(topic.equals("response")) {
        // need to reset my 5 min timer here
        // but if 5 mins go by and this try/catch isn't called again,
        // need to call the client.disconnect() method here
    } else {
        client.disconnect();
    }

} catch (Exception e) {
    success = false;
    e.printStackTrace();
}

所以基本上每次调用服务器时都会调用它 我需要在if语句中实现什么?

=================编辑后回答@Saeed Mashhadi的回答

请参阅以下日志输出。所以一开始,它运作良好。当disconnectCounter每秒增加一个时,我再打一次电话。

在那次通话之后,disconnectCounter再次从1开始,但它开始每秒增加2。左侧有时间戳。你能告诉我为什么会这样吗?

11-05 15:50:59.395 13253-13521/ ~~ disconnectCounter - 1  
11-05 15:51:00.404 13253-13521/ ~~ disconnectCounter - 2  
11-05 15:51:01.401 13253-13521/ ~~ disconnectCounter - 3  
11-05 15:51:02.403 13253-13521/ ~~ disconnectCounter - 4  
11-05 15:51:03.394 13253-13521/ ~~ disconnectCounter - 5  
11-05 15:51:04.400 13253-13521/ ~~ disconnectCounter - 6  
11-05 15:51:05.396 13253-13521/ ~~ disconnectCounter - 7  
11-05 15:51:06.402 13253-13521/ ~~ disconnectCounter - 8  
11-05 15:51:07.408 13253-13521/ ~~ disconnectCounter - 9  
11-05 15:51:08.399 13253-13521/ ~~ disconnectCounter - 10  
11-05 15:51:09.407 13253-13521/ ~~ disconnectCounter - 11  
11-05 15:51:10.406 13253-13521/ ~~ disconnectCounter - 12  
11-05 15:51:11.401 13253-13521/ ~~ disconnectCounter - 13  
11-05 15:51:12.409 13253-13521/ ~~ disconnectCounter - 14  
......   
11-05 15:51:27.498 13253-13253/ ~~~~~~~~~~~ USER CALL ~~~~~~~~~~~  
11-05 15:51:28.399 13253-13521/ ~~ disconnectCounter - 1  
11-05 15:51:28.514 13253-13521/ ~~ disconnectCounter - 2  
11-05 15:51:29.398 13253-13521/ ~~ disconnectCounter - 3  
11-05 15:51:29.515 13253-13521/ ~~ disconnectCounter - 4  
11-05 15:51:30.403 13253-13521/ ~~ disconnectCounter - 5  
11-05 15:51:30.519 13253-13521/ ~~ disconnectCounter - 6  
11-05 15:51:31.401 13253-13521/ ~~ disconnectCounter - 7  
11-05 15:51:31.512 13253-13521/ ~~ disconnectCounter - 8  
11-05 15:51:32.398 13253-13521/ ~~ disconnectCounter - 9  
11-05 15:51:32.510 13253-13521/ ~~ disconnectCounter - 10  
11-05 15:51:33.398 13253-13521/ ~~ disconnectCounter - 11  
11-05 15:51:33.506 13253-13521/ ~~ disconnectCounter - 12  
11-05 15:51:34.400 13253-13521/ ~~ disconnectCounter - 13  
11-05 15:51:34.504 13253-13521/ ~~ disconnectCounter - 14  
......  

谢谢!!

2 个答案:

答案 0 :(得分:1)

由于你没有代码,我会给你一个高水平的答案。您需要保留最后一次连接的时间戳和偏移量。您还需要不时检查时间戳+ offest是否低于实际时间戳。并且每次请求都会更新最后一个请求时间戳。

答案 1 :(得分:1)

您可以这样做:

Timer timer;

...

try {
    client.publish(topic, message);
    success = true;

    if(topic.equals("response")) {
        // If try/catch is called, counter resets
        disconnectCounter=0;
        timer=new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                // Increase counter every second
                disconnectCounter++;
                Log.i("counter", disconnectCounter + "");
                // If 5 mins go by and this try/catch isn't called
                // again, disconnect
                if(disconnectCounter==300){ // 300=5*60
                    client.disconnect(); 
                    timer.cancel();
                    disconnectCounter=0;
                }
            }
        }, 1000, 1000);

    } else {
        client.disconnect();
        disconnectCounter=0;
    }

} catch (Exception e) {
    success = false;
    timer.cancel();
    disconnectCounter=0;
    e.printStackTrace();
}