【发布时间】:2013-12-06 12:46:48
【问题描述】:
我正在使用 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,即使有可供读取的字节也是如此。有人有什么建议吗?
【问题讨论】:
标签: android multithreading bluetooth android-bluetooth