0

我正在开发一个需要 4 个字节 [] 队列在多个活动之间共享的应用程序。我使用 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("");
    }

}

我错过了一些概念吗?是否有另一种方法可以跨活动共享非阻塞队列?

4

1 回答 1

0

stefs 是正确的 - 问题出在另一个领域。我的调试方法有问题,代码工作正常。我的错误是,在单步执行一个线程时,另一个线程全速运行并在我检查它们之前消耗了字节。

于 2016-11-27T04:57:45.613 回答