Непрерывная передача данных между потоком пользовательского интерфейса и рабочим потоком, на котором работает TCP-клиент - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть приложение (Android Studio), которое непрерывно генерирует данные (координаты джойстика) на основе касания пользователя, которые я хочу непрерывно передавать на мой NodeMCU с помощью программирования Socket. Я реализовал Asyn c Task, чтобы сделать это на отдельном шаге.

Я передаю байты данных в AsyncTask через метод execute () из Main Activity. Метод doInBackground открывает соединение с сокетом и передает байт данных на сервер, а затем закрывает сокет. При следующем доступном вводе пользователя этот процесс повторяется снова. Сейчас по понятным причинам это не очень эффективно.

Я не нашел способа продолжать потоковую передачу байтов из основной активности в буфер в отдельном потоке, который, в свою очередь, продолжал бы передавать байты в NodeMCU без повторного закрытия сокета.

Так вот в чем вопрос. Что будет лучшим решением для моей проблемы? Я читал о многих вещах, таких как Services, Threads, Loopers, Rx Java, и мне кажется, что я ничего не понял.

1 Ответ

0 голосов
/ 14 апреля 2020

Ну, мои предпочтения были бы:

  1. Rx Java - потому что Rx Java является суперохлаждением, решает много проблем, таких как переключение планировщиков между пользовательским интерфейсом и вводом-выводом и близко к вашему домену. Думайте о своем устройстве джойстика как о наблюдаемом постоянно излучающем событии (именно для этого и хорош Ry Java).
  2. Сервисы - могут быть эффективными. Все сводится к шаблону наблюдателя, предоставленному Сервисом. В Android принято выставлять некоторые аппаратные средства через сервисы.
  3. Петли - потому что они немного более легки и просты в управлении, чем потоки.
  4. Потоки - возможны, но, вероятно, большинство работают делать на вашей стороне и, скорее всего, производить тонкие ошибки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...