Лучший способ для Сервиса, который запускает Действие для общения с ним

У меня есть сервис, который слушает сокет. При получении определенного входа это должно создать действие. При получении другого входа это должно уничтожить это действие. Я изо всех сил пытался некоторое время заставить сервис общаться с действием через AIDL (http://developer.android.com/guide/developing/tools/aidl.html), но это, кажется, не эффективно. Я думаю, что AIDL является только эффективным, когда процесс, с которым нужно говорить, является обслуживанием, не, когда это - действие? Я любил бы некоторые направления или предложения о том, как решить мою проблему.

Удачи,

6
задан pgsandstrom 16 February 2010 в 16:55
поделиться

1 ответ

У меня есть служба, которая прослушивает сокет . При получении определенного ввода необходимо создать действие.

Пожалуйста, сделайте это настраиваемым. Службы не должны начинать свою деятельность, за исключением очень необычных обстоятельств (например, сокет является SIP-соединением, и вы создаете VOIP-клиент). Появление активности прерывает пользователя в том, что он делает.

При получении других входных данных он должен уничтожить это действие.

Единственный сценарий, который я видел, когда это действительный шаблон, - это отключение экрана вызова, когда другой абонент вешает трубку. Если вы создаете клиент VOIP, предложенный вами шаблон должен быть в порядке, но в противном случае, пожалуйста, подумайте над тем, чтобы активность исчезла в середине пользователя, использующего его.

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

Нет, он работает в обратном направлении тоже, но обычно только в том случае, если действие - это запуск службы и привязка к ней. Что еще более важно, AIDL предназначен только для межпроцессного взаимодействия.

Я хотел бы получить несколько указаний или советов по решению моей проблемы.

На самом деле вы не предоставили достаточно информации о характере общения, чтобы дать вам исчерпывающий ответ. Что именно служба пытается сообщить об активности? Пытается ли действие также взаимодействовать со службой?

Рекомендуемый шаблон для постоянного обмена данными между действием и службой - использование шаблона локальной привязки. Вы найдете пример этого в ваших примерах SDK, и вы также можете найти его здесь .

У сервиса есть варианты для обратной связи с клиентом: через обратный вызов (например, Handler в ответе, предоставленном г-ном Смиляничем) или через широковещательную рассылку Intents . В случае обратного вызова действие должно быть привязано к службе, чтобы получить доступ к API для предоставления объекта обратного вызова. Затем служба будет удерживать этот объект и вызывать для него методы во время ключевых событий.

Если ваша служба выполняет свою основную работу в фоновом потоке, вам необходимо убедиться, что ваши операции пользовательского интерфейса выполняются в потоке пользовательского интерфейса. Обработчик - один из подходов к этому.

9
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: