Я разрабатываю приложение для Android, которое с высокой частотой получает данные от ble notify, печатает данные на экране и отправляет данные на другие периферийные устройства.
Это моя ситуация:
Обратный вызов onCharacteristicChanged получает массив байтов с именем «value» с частотой 10 Гц и распаковывает данные в некоторые переменные типа float и int.
обработчик, связанный с handlerThread, запускает Runnable каждые 30 Гц. Этот исполняемый модуль использует переменные, распакованные из value, сохраняет новые данные в некоторых переменных и отправляет широковещательное сообщение в UX.
- другой поток каждые 10 Гц использует данные, сохраненные на шаге 1, а шаг 2 выполняет некоторые математические операции с этими переменными и записывает данные о характеристике.
На шаге выше я сохраняю и использую переменные float, double и int.
Я боюсь обрабатывать параллелизм и думаю решить проблемы с параллелизмом, используя один и тот же поток обработчиков на шагах 2 и 3. Но когда приходит другое уведомление, я думаю, что есть проблема с условием гонки: /
другой вопрос: oncharacteristicchanged в каком потоке выполняется?
дополнительная информация о моей проблеме: в oncharacteristicchanged поступает новый массив байтов (на частоте 10 Гц), я распаковываю данные в переменные, в другом потоке B (на частоте 30 Гц) использую эти данные, делаю некоторые вычисления: и сохранить результат в некоторых других переменных; поток C использует результат потока B, он выполняет другие вычисления и записывает характеристику на частоте 10 Гц.
oncharacteristicchanged -> Тема B -> Тема C
Но я не могу остановиться на изменении характеристики, потому что я не знаю, в каком потоке это выполняется.
Ты