Поток пользовательского интерфейса предоставляет (через Bluetooth LE) данные с внешнего устройства с частотой 250 Гц (250 х байт / с).
У меня есть поток рендеринга в пользовательском SurfaceView, который ограничен 60 кадрами в секунду ( для хорошего рендеринга + производительность).
Мне не нужно сохранять весь введенный байт данных [], потому что в каждом кадре я не перерисовываю всю сцену (просто рисую ~ 4 новых значения (линии)) ,
Как можно избежать использования очереди данных (в которой пользовательский интерфейс добавляет значения, а поток рендеринга получает значения)? Пока мне нужно использовать блок syn c для общего ресурса (dataQueue), пользовательский интерфейс будет заблокирован (на несколько мс), пока поток рендеринга не получит значения (~ 4 байта).
У меня есть 7 SurfaceView во фрагменте (построение графиков), поэтому пользовательский интерфейс будет страдать ...
Кроме того, поскольку внешнее устройство отправляет другие параметры в реальном времени, это не решение для перемещения данных. получение в другом потоке (в этом случае я не буду блокировать поток пользовательского интерфейса, вместо этого я буду блокировать получение других значений, что приведет к огромной задержке на низкоскоростном c устройстве при медленном рендеринге).
Спасибо.
Простая иллюстрация architecutre.