У меня есть сервис, который слушает сокет. При получении определенного входа это должно создать действие. При получении другого входа это должно уничтожить это действие. Я изо всех сил пытался некоторое время заставить сервис общаться с действием через AIDL (http://developer.android.com/guide/developing/tools/aidl.html), но это, кажется, не эффективно. Я думаю, что AIDL является только эффективным, когда процесс, с которым нужно говорить, является обслуживанием, не, когда это - действие? Я любил бы некоторые направления или предложения о том, как решить мою проблему.
Удачи,
У меня есть служба, которая прослушивает сокет . При получении определенного ввода необходимо создать действие.
Пожалуйста, сделайте это настраиваемым. Службы не должны начинать свою деятельность, за исключением очень необычных обстоятельств (например, сокет является SIP-соединением, и вы создаете VOIP-клиент). Появление активности прерывает пользователя в том, что он делает.
При получении других входных данных он должен уничтожить это действие.
Единственный сценарий, который я видел, когда это действительный шаблон, - это отключение экрана вызова, когда другой абонент вешает трубку. Если вы создаете клиент VOIP, предложенный вами шаблон должен быть в порядке, но в противном случае, пожалуйста, подумайте над тем, чтобы активность исчезла в середине пользователя, использующего его.
Я думаю, что AIDL эффективен только тогда, когда процесс, с которым нужно разговаривать, является службой, а не когда это действие?
Нет, он работает в обратном направлении тоже, но обычно только в том случае, если действие - это запуск службы и привязка к ней. Что еще более важно, AIDL предназначен только для межпроцессного взаимодействия.
Я хотел бы получить несколько указаний или советов по решению моей проблемы.
На самом деле вы не предоставили достаточно информации о характере общения, чтобы дать вам исчерпывающий ответ. Что именно служба пытается сообщить об активности? Пытается ли действие также взаимодействовать со службой?
Рекомендуемый шаблон для постоянного обмена данными между действием и службой - использование шаблона локальной привязки. Вы найдете пример этого в ваших примерах SDK, и вы также можете найти его здесь .
У сервиса есть варианты для обратной связи с клиентом: через обратный вызов (например, Handler
в ответе, предоставленном г-ном Смиляничем) или через широковещательную рассылку Intents
. В случае обратного вызова действие должно быть привязано к службе, чтобы получить доступ к API для предоставления объекта обратного вызова. Затем служба будет удерживать этот объект и вызывать для него методы во время ключевых событий.
Если ваша служба выполняет свою основную работу в фоновом потоке, вам необходимо убедиться, что ваши операции пользовательского интерфейса выполняются в потоке пользовательского интерфейса. Обработчик
- один из подходов к этому.