美好的一天,我在这里接受你的一些建议。基本上我有一个类有两种方法如下。它允许我将数据发送到串行端口(UART),并从中接收数据。工作良好。
现在,我必须以这样的方式修改它,它会将一些数据发送到串口 serialPort.writeBytes(src.getBytes()); 并等待回复3秒如果我在3秒之间收到回复,则必须将其更新为TextView,否则必须发送第二个数据( serialPort.writeBytes(src1.getBytes()); )并再次等待回复。
我不是线程和处理程序方面的专家,因为我刚开始学习它。请告诉我这个。非常感谢你的时间。
public void sendData(){
final String src = "MYDATA\r";
final String src1 = "MYDATA1\r";
serialPort.writeBytes(src.getBytes());
**// Pause here and wait for the reply**
serialPort.writeBytes(src1.getBytes());
**// Pause here and wait for reply**
}
private class ReadThread extends Thread {
byte[] buf = new byte[512];
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int size;
if (mInputStream == null)
return;
size = serialPort.readBytes(buf);
if (size > 0) {
byte[] dest = new byte[size];
System.arraycopy(buf, 0, dest, 0, size);
byteLinkedList.offer(dest);
onDataReceived();
}
}
}
}
现在
答案 0 :(得分:0)
如果您没有复杂的情况,可以使用Android AsyncTask
- 进行搜索,您会发现很多引用。
基本上,您需要一个可以调用的接口,以便在收到数据时进行响应。轮询是在此线程上调用wait
的问题。如果您不熟悉等待,您也可以轻松搜索它。
关键问题是UI不应该wait
,而且不应该使用线程或AsyncTask。
如果您决定使用线程,那么请考虑创建一个简单的“监听器”(又名interface
)。它可能看起来很吓人,但基本上它是一个空类,你需要传递到你的自定义线程。
此外,您可能需要考虑在此过程中您的活动是否仍然可见。如果可能不是,并且您仍需要在后台完成任务,则需要Service
这是您选择的一个很好的“概述”:http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
由于您确实没有定义完整的用例,您可能需要做更多的研究或更具体。但这应该让你朝着正确的方向前进。
答案 1 :(得分:0)
这不是答案,我无法评论,因为我没有足够的代表。
我同意momo。所以你会有这样的事情:
class SendThread extends Thread{
boolean gotData = false; //flag to check if data is received.
@Override
public void run(){
while(gotData == false){
new Runnable() {
@Override
public void run(){
//SendData code
//if you get Data change gotData = true;
}
}.run();
Thread.sleep(3000); //sleep for 3 secs
}
}
}