我的应用程序有一些活动,在第一个我连接套接字与其他活动的服务器通信。此套接字在工作线程中运行。
我的问题是:在应用程序完成时我可以在哪里关闭此套接字?例如,使用BACK按钮......
我认为关闭最后一个活动的onDestroy()
中的套接字,但是这个活动可以在运行时由系统销毁并关闭套接字,即使应用程序没有完成。我不想要这个。
处理套接字连接的线程的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
块。
任何人都可以给我一些提示吗?
答案 0 :(得分:4)
永远不会执行finally
块,因为运行循环永远不会完成。在某些时候,Android只会杀死进程,这会杀死虚拟机,一切都会消失。
如果您的应用程序只包含活动,并且您在单独的线程中进行网络I / O,那么您无法知道何时关闭该线程,因为“应用程序”永远不会“完成”。您需要定义应用程序“完成”的方式。
更好的方法是将其放入服务中,因为如果Android想要终止进程,它将首先在服务中调用onDestroy(),这将使您有机会正确关闭线程。