完成申请时关闭套接字

时间:2012-04-04 22:06:04

标签: android sockets

我的应用程序有一些活动,在第一个我连接套接字与其他活动的服务器通信。此套接字在工作线程中运行。

我的问题是:在应用程序完成时我可以在哪里关闭此套接字?例如,使用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块。

任何人都可以给我一些提示吗?

1 个答案:

答案 0 :(得分:4)

永远不会执行finally块,因为运行循环永远不会完成。在某些时候,Android只会杀死进程,这会杀死虚拟机,一切都会消失。

如果您的应用程序只包含活动,并且您在单独的线程中进行网络I / O,那么您无法知道何时关闭该线程,因为“应用程序”永远不会“完成”。您需要定义应用程序“完成”的方式。

更好的方法是将其放入服务中,因为如果Android想要终止进程,它将首先在服务中调用onDestroy(),这将使您有机会正确关闭线程。