线程中,while(true)循环中,accept或者recieve监听,当外部网络断开后,有没有办法终止这个线程?
我打算在Service中判断,满足条件后,就重启这个Service自己,因为Service中启动的线程,所以Service停止的时候,线程也终止了。大家有没有更好的办法终止这个阻塞线程?因为如果不终止的话,下次连接上网络后启动线程,可能会端口被占用。内存也因为线程没有退出来,而越用越多。

解决方案 »

  1.   

    断网时做标记,然后在线程里面对标记做判断断网时就return;
      

  2.   

    你启动多线程时,thread应该要保存起来,然后收到断网通知后,把这些thread都interrupt(),interrupt只是解除socket的阻塞,并不是终止,因此你会捕获一个interruptException,并在其中,做一些额外的处理,然后socket.close或者关闭当前线程。
      

  3.   

    设置标记  在循环里面读取标记
    另外  你结束Service是结束不了线程的  除非你结束整个进程
      

  4.   

    @tanwei4199,结束Service和Activty我刚才测试了一下确实是结束不了线程,有的教材写得Acitivety里面不建议直接调用线程,因为界面可能退出了,线程还没有执行完毕,看来是这样的文字描述有误。
    中断线程看来只有两种方法,一是设置变量,二是阻塞无法判断变量的话使用interrupt()。这样理解对吗?