我正在编写一个连接到服务器并发送ping命令的应用程序,服务器将以pong命令回答。
我想实现连接超时机制,我的想法如下:
但是当我尝试第二次安排TimerTask时,会出现以下错误:
我想实现连接超时机制,我的想法如下:
- 客户端发送ping并启动带有定时任务和延迟的计时器
- 当客户端接收到pong时,计时器任务将被取消。
private final Timer mSystemLogoutTimer = new Timer();
private final TimerTask mLogoutTask = new TimerTask() {
@Override
public void run() {
mMessageInterface.onConnectionTimeout();
cancel();
}
};
private void ping() {
sendRequest(RequestBuilder.formPing());
mSystemLogoutTimer.schedule(mLogoutTask, CoreConst.PING_ANSWER_DELAY);
}
private void onPong() {
mLogoutTask.cancel();
}
但是当我尝试第二次安排TimerTask时,会出现以下错误:
java.lang.IllegalStateException: TimerTask is scheduled already
at java.util.Timer.scheduleImpl(Timer.java:572)
at java.util.Timer.schedule(Timer.java:459)
我不理解,因为我在TimerTask上调用了cancel()
方法。
请告诉我我做错了什么。 谢谢回答!
mLogoutTask.cancel();
返回什么?另外,您尝试过不使用“内存优化”吗? - Shlublucancel
始终返回true。 - Artem Mostyaev