Intereting Posts
Android-браузер по умолчанию не прокручивает веб-страницу Сделать изображение на половине экрана Каковы плюсы и минусы использования нескольких процессов в приложении android Написание XML на Android Не удалось получить доступ к jarfile lib \ archquery.jar Уведомление исчезает – Android DownloadManager Заставка экрана при загрузке url в webview в приложении для Android Ограничение времени записи по Android с использованием намерения Разработчик Android / iOS против Marmalade SDK Как отфильтровать только соответствующие мультимедийные файлы в Android? Android Studio. Портфолио и размеры файлов? Как я могу исправить? Эта версия библиотеки рендеринга более поздняя, ​​чем ваша версия плагина ADT в eclipse Эмулятор Android не запускается, показывая «недопустимый параметр командной строки», Как запустить две анимации одновременно в Android? Ошибка: (27, 13) Не удалось решить: com.google.firebase: firebase-core: 9.8.0

Уведомлять активность из службы

Я пытаюсь запустить Service из своей Activity чтобы следить за изменениями на веб-странице, это частное приложение, поэтому я не беспокоюсь о времени автономной работы …

Но я хотел бы передать данные из моего Service в свою Activity … Я не могу найти способ вызвать Activity из моей Service . Как я могу это достичь?

Solutions Collecting From Web of "Уведомлять активность из службы"

Как указал Алекс, вы можете привязываться к службе и передавать какой-то слушатель или обратный вызов службе, которая будет использоваться для событий.

Или вы можете использовать трансляцию Intent , возможно, используя методы, такие как setPackage() для Intent чтобы ограничить объем трансляции.

Или вы можете использовать createPendingResult() для создания PendingIntent который вы передаете в качестве дополнения для службы – служба может затем использовать этот PendingIntent для запуска onActivityResult() в вашей деятельности.

Или вы можете использовать ResultReceiver .

Или вы можете использовать Messenger .

(Правда, я не пробовал эти последние два подхода, но я думаю, что они будут работать здесь)

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

Некоторые уродливые способы:

1.) Если активность еще не началась, используйте intent и startActivity , но помните, что intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

2.) В противном случае, если действие уже началось, вы можете написать свой собственный метод обратного вызова в действии и зарегистрировать метод в службе, а затем прямо вызвать метод в службе.

Надеюсь найти какой-нибудь умный способ.

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

Механизм ResultReceiver объяснен в другом сообщении: – Restful API service. Однако он не будет работать во всех случаях. Пожалуйста, обратитесь к моему комментарию на эту должность. Механизм ограниченной видимости или PendingIntent представляется более подходящим.