我正在开发一个需要4个byte []队列才能在多个活动中共享的应用程序。我正在使用ConcurrentLinkedQueue,因为我希望它们是非阻塞的,因为它们将与IOIO OTG上的2个UART进行通信。似乎我只能在队列中将数据放在初始化的同一方法中,并且当控件传递给另一个方法时,大小为0.如果我将它们声明为公共并在一个活动中初始化它们,则其他可以活动看到它们,但是在add()之后,大小仍为0且没有异常,add()返回true。我甚至试图将它们放在单独的Application对象中,但结果是一样的。
IOIO服务循环器将读取输出队列并将字节发送到IOIO,并从IOIO读取字节并将它们放入输入队列。其他活动会将数据放入输出队列并从输入队列中删除数据。
以下是我现在所拥有的一些简化代码:
public class MyApp extends Application {
//for UARTs
public static Queue<byte[]> inQueue1 = new ConcurrentLinkedQueue<byte[]>();
public static Queue<byte[]> outQueue1 = new ConcurrentLinkedQueue<byte[]>();
public static Queue<byte[]> inQueue2 = new ConcurrentLinkedQueue<byte[]>();
public static Queue<byte[]> outQueue2 = new ConcurrentLinkedQueue<byte[]>();
}
public class MainActivity extends Activity {
private ToggleButton toggleButton_;
private Button btnSend_;
private EditText etTxData;
.
.
.
public void btnSendOnClick(View v){
String s = etTxData.getText().toString(); //i.e. s="ABC"
byte b[] = s.getBytes(); // i.e. b={65, 66, 67}
MyApp.outQueue1.add(b); //size is 0 before and after and add() returns true
etTxData.setText("");
}
}
我错过了一些概念吗?是否有另一种方法可以跨活动共享非阻塞队列?
答案 0 :(得分:0)
stefs是正确的 - 问题出在另一个领域。我的调试方法有问题,代码运行正常。我的错误是,当逐步执行一个线程时,另一个线程正在全速运行并在我检查它们之前消耗了这些字节。