我的应用程序有一些活动,在第一个我连接套接字与其他活动的服务器通信.此套接字在工作线程中运行.
我的问题是:在应用程序完成时我可以在哪里关闭此套接字?以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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是finally块永远不会被调用.
任何人都可以给我一些提示吗?
该finally块永远不会执行,因为运行循环永远不会完成。在某些时候,Android只是杀死了进程,这杀死了VM,一切都消失了。
如果您的应用程序仅包含活动,并且您正在单独的线程中进行网络I / O,则您将无法知道何时关闭线程,因为“应用程序”从未“完成”。您需要定义应用程序如何“完成”。
更好的方法是将其放入服务中,因为如果Android要终止进程,它将首先在服务中调用onDestroy(),这将使您有机会正确关闭线程。