2016-03-15 3 views
0

Я работаю над приложением Android, которое передает данные из сокетного соединения в интерфейс Bluetooth. Для удобства общения я создал два BufferedReader, которые я хочу слушать одновременно в IntentService. Кроме того, я хочу, чтобы служба могла реагировать на такие события, как потеря Bluetooth или WiFi-соединения. Однако служба должна работать до тех пор, пока на интерфейсе сервера не будет получена определенная команда выхода.Одновременно слушать несколько потоков в службе

До сих пор я использую две темы, но не могу понять, как выполнить мои требования.

РЕШЕНИЕ

Решение состоит в том, чтобы использовать обычный Service вместо IntentService. В сервисе я использую два асинхронных метода: AsyncTasks в моем случае для подключения к устройству Bluetooth и к серверу. Как только соединения установлены, я запускаю два потока, которые прослушивают данные, используя метод блокировки readLine(). В сервисе я просто ничего не делаю, что не позволяет основному потоку освободиться при обращении с Bluetooth-соединением. Служба прекращается моей деятельностью, как только пользователь хочет отключиться.

+1

Не используйте 'IntentService', вместо этого вы должны использовать обычную' Сервис'. – waqaslam

ответ

1

Не используйте IntentService, чтобы справиться с этим, а ваша собственная Service производная реализация. IntentService - это дизайн для обработки входящих Intent объектов во временной фоновой потоке, а затем полностью завершение работы после того, как все Intent s были обработаны. Вы уже перемещаете большую часть тяжелого подъема в свои собственные потоки фона, поэтому нет необходимости использовать IntentService. Однако убедитесь, что любая созданная вами реализация onStartCommand() не выполняет операции блокировки, поскольку она выполняется в основном потоке.

+0

Я планирую использовать две службы: одну для подключения Bluetooth и одну для подключения сокета. Для передачи данных между этими двумя (например, данные, полученные на стороне сервера, должны быть отправлены на устройство Bluetooth), я должен использовать регулярные 'Service' или связанные. – Lukas

+0

На самом деле вы можете просто использовать один и тот же «Сервис» и два разных потока, которые у вас уже установлены. Единственная причина для изучения связанных сервисов - если они работают в разных процессах (приложениях) или вы намерены заставить их работать в отдельных процессах в будущем. –

 Смежные вопросы

  • Нет связанных вопросов^_^