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

StackOverflow https://stackoverflow.com/questions/2274641

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Ваше здоровье,

Это было полезно?

Решение

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

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

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

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

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

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

Я хотел бы получить некоторые указания или предложения о том, как решить мою проблему.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top