Привязка к Сервису из Активности или запуск сервиса в другом процессе? - PullRequest
3 голосов
/ 23 ноября 2010

Я хочу установить соединение Bluetooth в сервисе. И должно быть взаимодействие между деятельностью и услугами. Служба должна быть запущена сразу после запуска приложения и должна иметь возможность взаимодействовать с действиями пользовательского интерфейса в определенных ситуациях.

Каким должен быть соответствующий способ сделать это? Если я связываю службу только с одной деятельностью, то эта служба будет связываться только с этой деятельностью. Итак, мне нужно использовать подход, основанный на AIDL, или есть какой-то другой выход для этого?

В противном случае, могу ли я иметь класс, который расширяет класс Application, а затем запускает службу оттуда и вместо этого связывает класс Application?

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

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

Документация Android по службам сообщает нам:

... системаСлужба будет работать до тех пор, пока она не будет запущена или с одним или несколькими подключениями к ней с флагом Context.BIND_AUTO_CREATE.Когда ни одна из этих ситуаций не выполняется, вызывается метод onDestroy () службы, и служба эффективно завершается

Поэтому я рекомендую связать службу со всеми действиями, которые должны взаимодействовать с ним.При связывании со службой возвращается IBinder, который вы можете использовать для связи со службой.Снова в соответствии с документацией Android по сервисам:

Обычно возвращаемый IBinder предназначен для сложного интерфейса, который был написан на aidl.

Хотя, если вам нужно только выполнитьПростое взаимодействие со службой позволяет использовать класс Messenger вместо записи полных файлов AIDL.Образец этого можно найти здесь .

Надеюсь, что это ответ на ваш вопрос!

0 голосов
/ 10 сентября 2011

Вы можете напрямую связываться с Сервисом, как указано в ответе выше, однако для Посланников в этом нет необходимости. Ваша служба будет работать в том же процессе, что и ваша деятельность, в 99,9% случаев. Мессенджеры предназначены для межпроцессного взаимодействия (МПК). Также нет необходимости в AIDL - это было разработано для продвинутого IPC.

Вместо этого вы должны использовать: BroadcastReceivers и Intents . Это то, для чего они были предназначены (связь между компонентами в приложении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...