Уведомить деятельность от службы - PullRequest
41 голосов
/ 06 ноября 2010

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

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

Ответы [ 4 ]

47 голосов
/ 06 ноября 2010

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

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

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

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

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

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

3 голосов
/ 20 декабря 2011

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

1 голос
/ 26 августа 2011

Некоторые отвратительные способы:

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

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

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

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

0 голосов
/ 17 марта 2011

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

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