ConcurrentLinkedQueue совместно используется в Android

Я работаю над приложением, которое требует, чтобы 4 очереди байтов [] были разделены между несколькими действиями. Я использую ConcurrentLinkedQueue, потому что я хочу, чтобы они были неблокирующими, потому что они будут взаимодействовать с двумя UART через IOIO OTG. Кажется, что я могу помещать данные в очереди только в том же методе, где они инициализируются, и когда управление передается другому методу, размер равен 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("");
    }

}

Я что-то упустил? Есть ли другой способ поделиться неблокирующими очередями между действиями?

1 ответ

Стефс прав - проблема была в другой области. Мой метод отладки был неисправен, и код работал правильно. Моя ошибка в том, что, проходя через один поток, другой работал на полной скорости и потреблял байты, прежде чем я смог их изучить.

Другие вопросы по тегам