Android蓝牙InputStream.read()保持停滞状态

时间:2013-12-06 02:41:49

标签: android multithreading bluetooth android-bluetooth

我正在使用InputStream通过蓝牙从我的Arduino读取数据。我使用单独的线程来执行此操作,因为它不会阻止UI线程。这个线程有这种风格的while循环:

while(!stop){

    int instruction = InputStream.read();

    switch(instruction){
         ... //processes data here
    }

}

在某些方面,我需要停止这个线程,因为我要求它停止在UI线程上,所以快速完成这一点至关重要。要停止线程,我将变量stop更改为true,因此逻辑上while循环应该完成并且线程应该退出。

当我将鼠标悬停在读取功能上时,eclipse表示如果到达流的末尾,它将返回-1。我的问题是这没有发生。如果没有从传感器接收到指令,则读取功能将停止,直到收到某些信息。它不应该返回-1,因为流已完成?

因为read()函数停止运行,我无法停止该线程。我会使用thread.stop();但这已被弃用且不稳定所以我想避免它。我也尝试使用InputStream.available()来查看在执行读操作之前是否有任何可用的东西,但这会返回0,即使有可读取的字节也是如此。有没有人有任何建议?

1 个答案:

答案 0 :(得分:0)

您选择的read()方法将阻塞,直到它读取一个字节。您可以通过关闭套接字或流来退出它。这将导致异常(您需要捕获)。仅供参考 - 您应该使用另一个read()方法,该方法返回读取的字节数。您正在使用的更简单的read()方法将返回-1表示0xff的数据字节和错误的读取。