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();
    }

4个回答

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

qq_35071078
下课睡觉 调用read的非阻塞接口?具体是那个接口?
2 年多之前 回复

用NIO等接口。

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

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

现在我改成这样就ok了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
java多线程之notify()的唤醒顺序
3
C/C++线程池问题,销毁线程时程序段出错
1
使用 RxAndroid 线程切换问题
3
windows下如何判断进程或者线程是否处于挂起状态
2
关于Java的线程的stop方法为什么不推荐使用
3
java中被抢占cpu资源,的线程处于什么状态?
1
boost库asio异步接收出错:error code995:由于线程退出或应用程序请求,已中止I/O操作。
2
使用ACE互斥锁进行线程同步,编译都没有问题,不加锁跑起来线程不同步很正常,加了锁,运行时崩溃
4
想自己编写一个线程死锁产生的例子,加深对synchronize的理解,但是发现了这个,理解不了
7
Android子线程中操作主线程的对象后,在主线程访问该对象,发现对象并未被改动
1
ScheduledExecutorService线程池,如何停止线程池中某一线程?
1
javaGC回收时,sleep状态并不在安全区域的线程怎么办?还是说线程中断时肯定在安全区域?
2
防止多线程没执行完就超时停止?
2
Win10和Win7对线程的处理机制不一样了吗?
1
Android开线程实现bitmap下落,遇到了线程没执行完停留在屏幕的问题。望大神们解答!多谢
1
Java一个线程对另一个线程实现控制运行和终止,但不影响两个线程的独立运行?
4
Android UI线程和子线程问题
17
java多线程使用sleep后线程停止不再执行
3
channelFuture.awaitUninterruptibly
6
Android的UI线程是不断循环的吗?