Итак, я разрабатываю приложение, которое требует постоянной связи UDP с сервером. Будут отправлены и получены кадры каждые 200-500 мс.
До сих пор я разработал следующую схему, но я не знаю, является ли это наилучшим подходом, и он на самом деле не работает идеально.
ФРАГМЕНТ A - LIVEDATA - VIEWMODEL A | <- EventBus -> ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ
ФРАГМЕНТ B - LIVEDATA - VIEWMODEL B | <- EventBus -> MAINACTIVITY
MAINACTIVITY --- LIVEDATA --- MAINACTIVITY VIEWMODEL <--- EventBus ---> Служба
Работает внутри потока, где выполняется следующее: - Два UdpServers (прослушивание на двух разных портах) - Два потока, один для опроса отправляющего PriorityQueue, один для опроса полученного PriorityQueue
В идеале система должна реализовать очередь с приоритетом и (сейчас это не работает ), проверьте наличие повторяющихся элементов в очередях, чтобы облегчить загрузку.
* Текущие проблемы: 1 - При обнаружении / отправке интенсивной нагрузки в очереди выдаются параллельные ошибки модификации. 2 - EventBus не имеет дело с большим количеством событий, генерируемых за короткий промежуток времени, события теряются. 3 - Архитектура недостаточно ясна.
Буду очень признателен за вашу помощь, поскольку мои основные сомнения заключаются в следующем, и я никуда не денусь: 1 - Как в идеале связать Сервис с Деятельностью, а затем с Фрагментами. Теперь viewmodel действия хранит данные (не постоянные, их нужно сохранять только до тех пор, пока пользователь не закроет приложение) и отправляет изменения во фрагменты через EventBus. 2 - Как обрабатывать потоки / Runnables и Queues / Polling.
Любая помощь действительно оценивается. Заранее спасибо и всего наилучшего!