Вопрос про отображение данных получаемых из потоков
Добавлено: 02 мар 2015, 14:18
Здравствуйте!
Суть программы:
есть устройство, которое по Wifi сети посылает данные 10 раз в сек, причем иногда посылает данные об ошибке какой-либо,
их надо отобразить
для отображения данных используется canvas LinearLayout-а - так как они графические
для отображения ошибок используется полупрозрачный AlertDialog, который отображается поверх canvas
1 путь:
один поток, в котором опрашиваю Socket и получаю данные, потом все отрисовываю
отрисовка canvas идет с помощью .postInvalidate(), отображение AlertDialog-a с помощью runOnUiThread из самого потока
минусы:
если оставить приоритет потока стандартным(т.е. не менять) то экранные компоненты тормозят, кнопку не нажмешь, контектстное меню вызывается с жуткими тормозами(а настройки приложения надо менять в процессе его работы)
AlertDialog отображается также с тормозами.
если ставить приоритет ниже среднего, то экранные компоненты живо реагируют, но данные обновляются хуже некуда, если приоритет поставить выше среднего, данные обновляются, но с тормозами(также как и при нормальном приоритете), а про нажатие на экранные компоненты можно забыть
2 путь:
сделал два сервиса Executors.newSingleThreadScheduledExecutor(), которые вызываются каждые 100 мс - то есть 10 раз в сек
в одном данные обновляются - запускается поток для Socket-a, в другом данные обрабатываются и выводятся, тоже каждые 100 мсек
проблем с экранными компонентами нет, но сохранился МИНУС AlertDialog отображается также с тормозами
если кто сталкивался то скажите как обошли этот вопрос
приложение по сути должно делать 2 простые вещи -
каждые 100мсек отображать данные, если прилетело сообщение об ошибке то всплывает AlertDialog
Суть программы:
есть устройство, которое по Wifi сети посылает данные 10 раз в сек, причем иногда посылает данные об ошибке какой-либо,
их надо отобразить
для отображения данных используется canvas LinearLayout-а - так как они графические
для отображения ошибок используется полупрозрачный AlertDialog, который отображается поверх canvas
1 путь:
один поток, в котором опрашиваю Socket и получаю данные, потом все отрисовываю
отрисовка canvas идет с помощью .postInvalidate(), отображение AlertDialog-a с помощью runOnUiThread из самого потока
минусы:
если оставить приоритет потока стандартным(т.е. не менять) то экранные компоненты тормозят, кнопку не нажмешь, контектстное меню вызывается с жуткими тормозами(а настройки приложения надо менять в процессе его работы)
AlertDialog отображается также с тормозами.
если ставить приоритет ниже среднего, то экранные компоненты живо реагируют, но данные обновляются хуже некуда, если приоритет поставить выше среднего, данные обновляются, но с тормозами(также как и при нормальном приоритете), а про нажатие на экранные компоненты можно забыть
2 путь:
сделал два сервиса Executors.newSingleThreadScheduledExecutor(), которые вызываются каждые 100 мс - то есть 10 раз в сек
в одном данные обновляются - запускается поток для Socket-a, в другом данные обрабатываются и выводятся, тоже каждые 100 мсек
проблем с экранными компонентами нет, но сохранился МИНУС AlertDialog отображается также с тормозами
если кто сталкивался то скажите как обошли этот вопрос
приложение по сути должно делать 2 простые вещи -
каждые 100мсек отображать данные, если прилетело сообщение об ошибке то всплывает AlertDialog