Обновите запущенный в данный момент BroadcastReceiver (передайте ему новые значения) из и Activity - PullRequest
0 голосов
/ 28 июля 2011

Можно ли обновить работающий в данный момент Broadcastreceiver из Activity?Например:

Скажем, пользователь вводит строку ... и затем нажимает "Отправить". Я хочу, чтобы широковещательный получатель обновился новой строкой и использовал эту строку вместо старой, которую получатель можетиметь.Это возможно?Или я могу каким-то образом остановить старый получатель, когда пользователь нажимает кнопку «Отправить», а затем перезапустить его с новой строкой?

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Может быть, я неправильно понял ваш вопрос, но почему бы не сохранить вашу строку в SharedPreference ?

Всякий раз, когда вам в Activity потребуется обновить эту строку, она сохранит ее в качестве предпочтения и на onReceive метод вашего вещательного приемника, вы просто получите его обратно из предпочтения.

0 голосов
/ 28 июля 2011

Не думаю, что ты можешь. Если вы посмотрите документацию Receiver Lifecycle , вы увидите, что жизненный цикл ограничен onReceive.

Если жизненный цикл получателя достаточно длинный, чтобы пользователь мог с ним взаимодействовать, я бы просто использовал BroadcastReceiver для запуска службы. Служба может делать две вещи:

  1. запустить фоновый поток для выполнения вашей длительной задачи
  2. зарегистрировать (другой) BroadcastRecevier в IntentFilter для обновления строки (как обновляется пользователем в действии). Когда служба получает намерение, она обновит строковое значение. Обратите внимание, что вам придется синхронизировать между службой и фоновым потоком (оставлено в качестве упражнения для заинтересованного читателя).

Затем ваш код активности запускает Intent каждый раз, когда пользователь изменяет указанное значение.

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

...