Как избежать блокировки пользовательского интерфейса, когда он предоставляет данные потоку рендеринга CustomSurfaceView? - PullRequest
0 голосов
/ 09 февраля 2020

Поток пользовательского интерфейса предоставляет (через Bluetooth LE) данные с внешнего устройства с частотой 250 Гц (250 х байт / с).

У меня есть поток рендеринга в пользовательском SurfaceView, который ограничен 60 кадрами в секунду ( для хорошего рендеринга + производительность).

Мне не нужно сохранять весь введенный байт данных [], потому что в каждом кадре я не перерисовываю всю сцену (просто рисую ~ 4 новых значения (линии)) ,

Как можно избежать использования очереди данных (в которой пользовательский интерфейс добавляет значения, а поток рендеринга получает значения)? Пока мне нужно использовать блок syn c для общего ресурса (dataQueue), пользовательский интерфейс будет заблокирован (на несколько мс), пока поток рендеринга не получит значения (~ 4 байта).

У меня есть 7 SurfaceView во фрагменте (построение графиков), поэтому пользовательский интерфейс будет страдать ...

Кроме того, поскольку внешнее устройство отправляет другие параметры в реальном времени, это не решение для перемещения данных. получение в другом потоке (в этом случае я не буду блокировать поток пользовательского интерфейса, вместо этого я буду блокировать получение других значений, что приведет к огромной задержке на низкоскоростном c устройстве при медленном рендеринге).

Спасибо.

Простая иллюстрация architecutre.

...