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