我确定这里有一个类似的问题,但我似乎无法找到它。
这是我想要做的事情。
让我们说我已连接到服务器,如果用户在最近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
......
谢谢!!
答案 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();
}