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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

Несколько безобразных способов:

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

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

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

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

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

Другие вопросы по тегам