0

Я пытаюсь иметь двунаправленное соединение между двумя устройствами, один из которых будет сервером, а другой - клиентом. Поскольку он двунаправлен, оба могут отправлять данные приема.Android IntentService call

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

Итак, если внутри метода onHandleIntent() я жду сообщений, где я должен помещать код в сообщения SEND?

EDIT: Я мог бы создать еще одну услугу для части отправки, но это заставило бы меня создать 4 службы, 2 для клиента (отправить и получить) и еще 2 для сервера (отправить и получить еще раз).

ответ

0

IntentService имеет следующее поведение:

Все запросы обрабатываются на одном рабочем потоке - они могут взять столько, сколько нужно (и не будет блокировать основной цикл приложения), но только один запрос будут обрабатываться одновременно.

от the docs. Тот же IntentService не должен делать 2 вещи одновременно - если он прослушивает (я предполагаю, что цикл while в onHandleIntent?), То любые сообщения, отправленные в этот IntentService во время прослушивания, не будут обрабатываться. Они будут стоять в очереди до тех пор, пока прослушивание не будет выполнено и отправлено тогда. Вы можете создать два IntentServices (один для отправки, один для получения) или создать новую службу, которая будет создавать собственные потоки, которые могут отправлять и слушать одновременно.

Я бы предположил, что проще было бы отправлять и получать от других Служб.

+0

Большое вам спасибо за помощь! Я буду следовать вашим советам и использовать два разных IntentService (для отправки и получения). Возможно, однажды я проверю, будет ли более эффективным использование службы с двумя потоками. Опять же, огромное спасибо за совет, я был застрял. Я новичок здесь, и я не знаю, помогут ли мои голоса, но я надеюсь, что они это сделают :) –

+0

Я еще не тестировал, но я думаю, что могут быть некоторые проблемы с использованием двух IntentServices (и установления соединения в метод onStartCommand - сокеты и объекты потока -), так как он заставит меня иметь два набора сокетов для тех же двух устройств. Я не знаю, будет ли это проблематично. Таким образом, возможно, одна услуга с двумя потоками внутри будет лучше, потому что таким образом вы можете использовать те же объекты сокета и потока. –

+0

У меня также была Служба, которая выполняла какое-то параллельное чтение/запись в поток. То, что я сделал, - это один сервис (не IntentService), который запускает прослушивающий поток при запуске и убивает его при остановке. Что-то вроде этого может или не может работать для вас, но это имело смысл для меня :) – Bob