Уведомлять активность из службы
Я пытаюсь запустить Service
из моего Activity
, чтобы следить за изменениями на веб-странице, это личное приложение, поэтому я не беспокоюсь о времени автономной работы...
Но я бы хотел передать данные из моего Service
в мой Activity
... Кажется, я не могу найти способ вызвать Activity
из моего Service
. Как я могу достичь этого?
Ответы
Ответ 1
Как указал Алекс, вы можете привязываться к службе и передавать какой-то прослушиватель или обратный вызов службе, которая будет использоваться для событий.
Или вы можете использовать широковещательную рассылку Intent
, возможно, используя методы типа setPackage()
на Intent
, чтобы ограничить область широковещательной передачи.
Или вы можете использовать createPendingResult()
для создания PendingIntent
, который вы передаете в качестве Intent
дополнительно к сервису, - служба может затем использовать этот PendingIntent
для запуска onActivityResult()
в вашей деятельности.
Или вы можете использовать ResultReceiver
.
Или вы можете использовать Messenger
.
(по общему признанию, я не пробовал эти последние два подхода, но я думаю, что они будут работать здесь)
Ответ 2
Еще одна альтернатива: если ваша служба обновляет контент-провайдера, активность может быть уведомлена через ContentObserver. Этого было бы достаточно, если бы ваша служба загружала некоторые данные с сервера, и вы просто хотите отображать новое содержимое в этом мероприятии.
Ответ 3
Некоторые уродливые способы:
1.) Если активность еще не началась, используйте intent
и startActivity
, но помните intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2.) В противном случае, если действие уже началось, вы можете написать свой собственный метод обратного вызова в действии и зарегистрировать метод в службе, а затем прямо вызвать метод в службе.
Надеюсь найти какой-нибудь умный способ.
Я думаю, что трансляция также хорошо работает, вы можете написать статический внутренний класс для приема трансляции и запуска активности. Но это также уродливо, на мой взгляд.
Ответ 4
Механизм ResultReceiver объяснен в другом сообщении:
Сервис Restful API
Однако это не будет работать во всех случаях. Пожалуйста, обратитесь к моему комментарию на эту должность. Механизм ограниченного охвата или механизм PendingIntent кажутся более подходящими.