【发布时间】:2014-01-24 15:11:09
【问题描述】:
此应用通过 USB 转串行加密狗与串行设备通信。我已经能够让它处理我的单个查询没问题,但是我有一个命令可以将多个查询发送到串行设备,如果溢出,我觉得缓冲区。这是我的代码的一部分:
这是我的数组,有 20 个查询命令:
String [] stringOneArray = {":000101017d", ":0001060178", ":00010B016C", ":000110017D",
":0001150178", ":00011A016C", ":00011F0167", ":0001240178", ":0001290173",
":00012E0167", ":0001330178", ":0001380173", ":00013D0167", ":0001420178",
":0001470173", ":00014C0167", ":0001510178", ":0001560173", ":00015B0167", ":0001600178"};
这就是我使用数组的方式:
getVelocitiesButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ftDev.setLatencyTimer((byte) 16);
int z;
for (z = 0; z < 19; z++) {
String writeData = (String) stringOneArray[z];
byte[] OutData = writeData.getBytes();
ftDev.write(OutData, writeData.length());
try {
Thread.sleep(50);
} catch (InterruptedException e) { }
}
}
});
不确定其余代码是否必要,但会在需要时添加。 所以 ftdev 是我的串口设备。它将查询命令发送到串行设备,它以字节为单位接收响应,我使用 For 循环构建响应,直到所有字节(每个响应 31 个字节)然后我处理该响应,那时它应该接收第二个查询来自数组的命令,依此类推,直到发送最后一个命令。想我只是减慢 FOR 循环并添加 thread.sleep 但它冻结了应用程序并崩溃......什么给了?有没有其他方法可以控制命令发送的速度?我宁愿尽快发送它们,但恐怕我不太了解 Java。到目前为止,这一直是我完成这个个人项目的主要垫脚石,被困了 2 天来研究和尝试解决方案。
【问题讨论】:
-
如果问题可以通过暂停输出来解决,那么您只需将工作放在后台线程中。您在
onClick中所做的所有耗时过长的操作都会“冻结”应用程序。 -
请发布您的相关日志条目。
标签: java android arrays multithreading serialization