android 如何停止处于I/O状态的线程?

我又一个线程,读数据的线程,线程执行到这句话就会阻塞

 Log.e("info", "****************正 在 读 取****************");
                    size = mInputStream.read(buffer);

但是我想在activity退出的时候结束掉这个线程。
网上说不建议使用.stop来结束线程。我就用了interrupt,但是没有没有抛出中断的异常。
我又让哪个Thread 实现了InterruptibleChannel接口,也没有用啊。
这是actiity 的onDestroy的方法:

     /**
     * activity销毁的时候关闭串口
     */
    @Override
    protected void onDestroy() {
        //mReadThread就是读数数据的线程
        if (mReadThread != null) {
            canRead = false;
            mReadThread.interrupt();
        }
        //mInputStream就是读取数据的流
        if (mInputStream!=null){
            try {
                mInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        handler.removeCallbacksAndMessages(null);
        handler = null;

        closeSerialPort();
        super.onDestroy();
    }

你这个阻塞在read了,所以线程不能中断,你需要调用read的非阻塞接口,就不会一直阻塞在I/O。当你想结束的时候,可以让线程退出。

用NIO等接口。

或者用一些其他方法来让它退出
http://stackoverflow.com/questions/6579539/how-to-unblock-inputstream-read-on-android

http://blog.csdn.net/javayang2010/article/details/6775370

参考。

谢谢,我知道为什么了。因为这个InputStram 我是用c语言获取的 FileDescriptor对象,获取的时候我设置的是阻塞的方式,所以在java里close也close不掉。
fd = open(path_utf, O_RDWR | flags | O_NDELAY);

现在我改成这样就ok了