【发布时间】:2012-10-11 09:20:28
【问题描述】:
我有一个始终处于活动状态的套接字连接的 android 应用程序。如果连接丢失,应用程序会立即重新连接到服务器。 套接字在单独的线程中运行。
我可以在不同的情况下正确关闭套接字。例如,当屏幕关闭或按下返回按钮时。
我试图用这个覆盖 onPause、onResume、onDestroy:
我可以在不同的情况下正确关闭套接字。例如,当屏幕关闭或按下返回按钮时。
我试图覆盖 onPause、onResume、onDestroy。这三种方法我都试过了,
显式关闭套接字:
socket.close();
只是将其归零:
socket = null;
而且我也试过shutdownInput方法:
socket.shutdownInput();
但服务器继续认为套接字是活动的。
P.S.:顺便说一下,当我重新编译并再次运行 android 应用程序时,连接断开良好。
【问题讨论】:
-
上面的代码怎么不崩溃也不抛出异常呢?我的意思是,您正在对一个空对象调用 shutdownInput 方法。
-
selbie,这 3 行代码当然不能一起工作。我刚刚提到了我的尝试。 3 行 = 3 次不同的尝试
-
哦,我明白了。这是完全不明显的。像上面那样的单个代码块通常在 SO 上被解释为表示您尝试过的实际代码路径。让我为你编辑你的问题。
-
我实际上不是 Java 专家 - 所以我会阻止发布答案。但是 socket.close() 几乎可以肯定是正确的调用方法。也许错误在服务器上?或者当 android 暂停您的应用程序时,没有发送未发送的待处理关闭?我对此表示怀疑,但如果您可以运行嗅探器以查看是否发送了 FIN,您可以确认这是客户端错误还是服务器错误。