我的应用程序有一些 Activity ,在第一个 Activity 中,我连接一个套接字以与其他 Activity 的服务器通信。此套接字在工作线程中运行。
我的问题是:当应用程序完成时,我在哪里可以关闭这个套接字?例如使用后退按钮...
我想在上一个 Activity 的 onDestroy()
中关闭套接字,但即使应用程序未完成,此 Activity 也可能在运行时被系统销毁并关闭套接字。我不想要这个。
我的处理套接字连接的线程的 run()
方法是这样的:
public void run() {
if (this.bliveclient.isConnected()){
try {
//...
while (running) {
//waiting for input data and do something...
}
}
catch (IOException ex) {
//handle exception
}
finally{
try {
mySocket.close();
} catch (IOException ex) {
//handle exception
}
}
}
但是 finally
block 永远不会被调用。
谁能给我一些提示?
最佳答案
finally
block 永远不会执行,因为运行循环永远不会完成。在某些时候,Android 会终止进程,这会终止 VM,一切都会消失。
如果您有一个仅包含 Activity 的应用程序,并且您在单独的线程中执行网络 I/O,那么您无法知道何时关闭线程,因为“应用程序”永远不会“完成”。您需要定义应用程序如何“完成”。
更好的方法是将其放入服务中,因为如果 Android 想要终止进程,它将首先在服务中调用 onDestroy(),这将使您有机会正确关闭线程。
关于android - 完成应用程序时关闭套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10019934/