我正在开发一款与蓝牙设备通信的Android应用程序。
该设备不断向手机发送信息,但我选择只有在用户想要时才读取数据:通过按下启动/停止按钮。每次都会启动/停止一个读取服务,但连接保持打开状态。
连接设备很好,无论按下多少次启动/停止按钮,但只要用户让应用程序处于“停止”状态超过5秒钟,程序就会在下次按下“启动”按钮时卡在inputstream.read()。
我已经检查了套接字仍然是打开的。我知道read()是一个阻塞函数,但在这种情况下它不应该阻塞,因为设备正在不断发送数据。
有人遇到过类似的问题吗?可能问题确实来自于在几秒钟内未使用套接字吗?
以下是我用于获取数据的代码片段:
该设备不断向手机发送信息,但我选择只有在用户想要时才读取数据:通过按下启动/停止按钮。每次都会启动/停止一个读取服务,但连接保持打开状态。
连接设备很好,无论按下多少次启动/停止按钮,但只要用户让应用程序处于“停止”状态超过5秒钟,程序就会在下次按下“启动”按钮时卡在inputstream.read()。
我已经检查了套接字仍然是打开的。我知道read()是一个阻塞函数,但在这种情况下它不应该阻塞,因为设备正在不断发送数据。
有人遇到过类似的问题吗?可能问题确实来自于在几秒钟内未使用套接字吗?
以下是我用于获取数据的代码片段:
public void start() {
if (isStarted()) {
return;
}
task = taskService.submit(new Runnable() {
@Override
public void run() {
int value;
channel.reset();
try {
while ((value = in.read()) != -1 && !Thread.currentThread().isInterrupted()) {
channel.put((byte) (value & 0xFF));
}
} catch (IOException e) {
Log.d("STRS", "IO error : " + e.getMessage(), e);
}
}
});
}
public void stop() {
if (!isStarted()) {
return;
}
task.cancel();
}
public boolean isStarted() {
return task != null && !task.isDone();
}
Thread
зҡ„дёӯж–ӯж Үеҝ—еҸҜд»Ҙиў«еҸҰдёҖдёӘзәҝзЁӢжё…йҷӨпјҢдҪҶд»ҺжӮЁеҸ‘еёғзҡ„д»Јз ҒжқҘзңӢпјҢдјјд№Һ并йқһеҰӮжӯӨгҖӮжҲ‘зңӢеҲ°зҡ„дёҖдёӘй—®йўҳжҳҜпјҢжӮЁжІЎжңүдҪҝз”Ёд»»дҪ•еҗҢжӯҘжқҘи®ҫзҪ®/жЈҖжҹҘзҠ¶жҖҒгҖӮ - Titus