2017-01-25 2 views
0

У меня есть объект данных, который иногда обновляется из источника данных в Интернете с использованием повторяющегося сигнала тревоги.Ведение списка PendingIntents, сохранение прежнего жизненного цикла объекта-объекта

Этот объект данных отслеживает объекты, которые хотят получать уведомления при получении новых данных. В настоящее время я использую два способа регистрации слушателей: они могут регистрироваться как обратный вызов, если они ожидают обновления только в том случае, если приложение находится на переднем плане, или они могут зарегистрироваться с помощью PendingIntent, если объект наблюдения должен быть уведомлен, даже если приложение не активен.

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

Есть ли способ, которым я могу попросить систему, которая, как я знаю, содержит собственный список PendingIntents для всех моих «ожидающих» событий?

Обратите внимание, что я не могу воссоздать PendingIntents при создании объекта или в любое другое время - они созданы слушателями, и невозможно определить, какие поля они установили или их значения.

+0

«Полагаю, я мог бы придумать сложный метод сохранения списка и всех полей в нем в общих предпочтениях или что-то еще» - нет.«создаются слушателями, и невозможно определить, какие поля они установили или их значения» - если эти слушатели находятся в вашем приложении, почему вы используете «PendingIntents» в первую очередь? Если этих слушателей нет в вашем приложении, то они не являются вашими «PendingIntents» (по отношению ко всем «моим» PendingIntents »). – CommonsWare

+0

@CommonsWare: Я намерен использовать PendingIntent для уведомления моих других компонентов приложения для обновления своих дисплеев или того, что они хотят делать, когда мой объект данных обновляется. Если пользователь не взаимодействует с приложением в то время, каким другим способом я могу уведомить мои компоненты приложения о наличии новых данных? В этом конкретном случае я обновляю такие вещи, как appWidgets, которые отображают данные и проверяют, должны ли выдаваться уведомления. – rothloup

+0

«Какой еще метод я могу уведомить мои компоненты приложения о наличии новых данных?» - um, методы вызова на объектах Java? Если ваши проблемы связаны с жесткой связью, используйте шину событий. «Я обновляю такие вещи, как appWidgets, которые отображают данные и проверяют, должны ли выдаваться уведомления» - используйте «AppWidgetManager» для обновления виджета приложения. Для обновления виджета приложения не требуется «PendingIntent». – CommonsWare

ответ

0

Посмотрите на них Storage Options.

Раньше мне приходилось планировать аварийные сигналы, используя ожидающие намерения. Когда устройство перезагружается, ОС удаляет все свои аварийные сигналы, поэтому мне пришлось воссоздать их, когда ОС завершила загрузку.

Чтобы определить, есть ли совпадение двух PendingIntents, следующее должно быть равно:

  • Параметр requestCode используется, когда PendingIntent была создана
  • Намерение ДЕЙСТВИЯ
  • Намерение КАТЕГОРИИ
  • Намерение DATA
  • Цель MIMETYPE
  • Намерение ПАКЕТ
  • Намерение КОМПОНЕНТ

Дополнительные сведения не принимаются во внимание.

Таким образом, я сохранил эту информацию в реляционной базе данных (Realm в моем случае) и мог бы «воссоздать» ожидающие намерения позднее.

Кроме того, взгляните на this answer. Он очень похож на ваш.

0

Звучит сложно и, вероятно, невозможно (с использованием PendingIntent).

Почему бы вам просто не транслировать изменения ваших объектов в широковещательном формате Intent. Таким образом, вам не нужно отслеживать слушателей. Любой компонент, который хочет прослушать изменения в объекте, может просто зарегистрировать прослушиватель для соответствующей трансляции Intent.

Смежные вопросы