Сервисы использования Android, любопытство новичка

1

Я хочу знать некоторые базовые, практические вещи о Сервисах, которые не упоминаются на страницах справочников Android Developers.

  1. Как я могу вызвать службу из другого приложения, которое еще не запущено?

  2. Как я могу запросить, какие службы предоставляются другими приложениями?

  3. Предоставляются ли услуги для использования методов пользовательского интерфейса? (в документации говорится, что они специально предназначены для того, чтобы пользователь не пользовался пользовательским интерфейсом, но в их примере есть тост)

  4. Являются ли услуги повторно участниками? (если два приложения вызывают одну и ту же услугу, будут ли они "обслуживаться" одновременно без использования какой-либо локальной переменной)

  5. Являются ли сервисы такими плагинами?

  6. Могу ли я использовать службу для расширения функциональности моего уже установленного приложения? (т.е. я могу установить "только сервис"

  7. Могут ли сервисы запускать обычные действия? Могут ли они заставить своих клиентов закончить?


  • 0
    На самом деле, открытие 7 вопросов гораздо лучше. Это будет закрыто.
  • 0
    @amigableclarkkant Почему это?
Показать ещё 3 комментария
Теги:
service

1 ответ

4
Лучший ответ

Как я могу вызвать службу из другого приложения, которое еще не запущено?

Такие услуги, как "Деятельность", запускаются с использованием системы Intent. Вы можете запустить сервис, используя startService(intent); метод. Это пересекает границы приложений, пока служба настроена правильно, чтобы отвечать на намерения из-за пределов своей собственной песочницы.

Как я могу запросить, какие службы предоставляются другими приложениями?

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

Предоставляются ли услуги для использования методов пользовательского интерфейса? (в документации говорится, что они специально предназначены для того, чтобы пользователь не пользовался пользовательским интерфейсом, но в их примере есть тост)

Услуги имеют доступ к контексту приложения (и, следовательно, может опубликовать Toast или начать Activities своих собственных). Они также могут иметь видимость приложения, работающего в одной и той же песочнице, это означает, что с помощью обработчиков они могут напрямую изменять пользовательский интерфейс текущей активности. По своей природе, однако, Services не предназначены для взаимодействия с пользовательским интерфейсом, хотя это возможно.

Являются ли услуги повторно участниками? (если два приложения вызывают одну и ту же услугу, будут ли они "обслуживаться" одновременно без использования какой-либо локальной переменной)

Услуги могут быть запущены с разными флагами (и могут быть запрограммированы по- разному), чтобы позволить им обслуживать полученные Intents в асинхронном режиме или в очереди на Intents должны выполняться последовательно. Вы можете узнать больше об этом (и остальную часть вашего вопроса здесь)

Являются ли сервисы такими плагинами?

Плагины?

Могу ли я использовать службу для расширения функциональности моего уже установленного приложения? (т.е. я могу установить "только сервис"

Вы можете установить службу как отдельное приложение, которое может startService() вызовы, которые он делает, если он не использует именованный Intent. Однако эта служба будет находиться в другой песочнице и не будет иметь доступ к текущим переменным/состоянием приложения.

Могут ли сервисы запускать обычные действия? Могут ли они заставить своих клиентов закончить?

Да, если служба работает в одной и той же песочнице, у них может быть видимость приложения, работающего рядом с ним. Он может использовать startActivity() поскольку он имеет доступ к контексту приложения и может вызывать статические методы внутри приложения (который может содержать статический доступ к Activity).

  • 0
    Большой! Остается только одно сомнение относительно вопроса 1. Не ясно, запускается ли автоматически другое приложение, предоставляющее услугу, когда я вызываю службу, или оно должно быть запущено уже.
  • 2
    startService(intent) запустит остановленную службу или доставит намерение уже запущенной службе. Как клиент, вам, как правило, не нужно знать, запущена ли уже Служба или нет.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню