Уведомить деятельность от службы
Я пытаюсь начать 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 кажутся более подходящими.