完成申请时关闭套接字

amp*_*amp 6 sockets android

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

我的问题是:在应用程序完成时我可以在哪里关闭此套接字?以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块永远不会被调用.

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

Dav*_*ser 5

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

如果您的应用程序仅包含活动,并且您正在单独的线程中进行网络I / O,则您将无法知道何时关闭线程,因为“应用程序”从未“完成”。您需要定义应用程序如何“完成”。

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