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