Простые способы взаимодействия с сервисами?

Существуют ли способы взаимодействия с сервисами так же просто, как контент-провайдеры?

Я имею в виду, например, с поставщиками контента у нас есть getContentResolver() : легко запрашивать данные, если у вас есть Context . Вам даже не нужно беспокоиться о деталях межпроцессных вызовов ( ContentProvider ).

С помощью служб вы должны связать их, дождаться установления соединения, а затем отключить их, если вы не хотите просачивать память. Хуже того, вам нужно иметь дело с AIDL для удаленных служб.

Взяв этот пример:

У меня есть модуль загрузки файлов. В настоящее время существует два подхода: поставщик контента или служба. Чтобы начать каждую новую загрузку, это легко для обоих:

  • Сервис: startService() . Вам просто нужен контекст.
  • Поставщик контента: getContentResolver() и добавьте новую загрузку в свою очередь. Вам также нужен контекст.

Но пока выполняется загрузка, я хочу получить некоторую информацию (средняя скорость, процентная ставка …). Проблема здесь: с провайдером контента проще общаться. Снова вам просто нужен контекст и запросите требуемую информацию. В случае службы вам необходимо связать ее, отвязать или создать собственный AIDL (если это удаленная служба) …

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

Благодаря,

Два пути я бы предложил сделать это …

Во-первых, попробуйте использовать ResultReceiver, который реализует Parcelable .

В основном создайте свой собственный класс, который расширяет ResultReceiver затем вызовите putExtra(String name, Parceable value в Intent которое вы передаете в startService(Intent intent) из вашей Activity . Затем Service может использовать send(int resultCode, Bundle resultData) в ResultReceiver для Отправьте данные назад. Если ResultReceiver является внутренним классом вашей Activity он сможет взаимодействовать с его пользовательским интерфейсом.

Вторая возможность заключается в использовании Notifications с использованием флага FLAG_ONGOING_EVENT . Это, очевидно, не будет отображаться в самой Activity , но появится на панели Notification но вы можете создать настраиваемый RemoteView с текстом прогресса и обновления и т. Д. С каждым обновленным уведомлением. Это похоже на то, что вы видите, когда Google Play устанавливает или обновляет приложение на своем устройстве.

Intereting Posts
OnLocationChanged () никогда не вызывал Как создать AppBarLayout, который перекрывает содержимое координатораLayout Как перенести одну из моих Android-приложений на другую учетную запись разработчика Android (не мой) Почему для удаления rawQuery требуется moveToFirst, чтобы фактически удалить строки? Приложение Application.mk игнорируется Android Studio Ресурсы $ NotFoundException в графической компоновке Предварительный просмотр ADT (но приложение фактически работает) Масштабирование фиксированного SurfaceView для заполнения по вертикали и поддержания пропорций Возможно ли одновременное существование двух экземпляров одного и того же приложения для Android? Как добавить символы валюты в формате pdf, созданные моим приложением? Как изменить языковой стандарт по умолчанию в android? Как установить размер приложения Использование вложенного фрагмента и объекта аниматора рядом LeftNavBar создает черную полосу в верхней части действия RecyclerView: как очистить переработанные виды от RecyclerView.RecycledViewPool Android sdk manager не получает другую платформу sdk