обновить состояние приложения (глобальные переменные) из вещательного приемника - PullRequest
2 голосов
/ 04 июня 2011

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

У меня есть простое приложение, которое должно периодически проверять результаты поиска в Интернете. Читая, казалось, что использование AlarmManager было наиболее подходящим способом для планирования события, а не фоновой службы.

Основное действие показывает самый последний результат веб-запроса, когда этот запрос имел место, и в следующий раз это будет связано с повторным запросом.

Проблема, с которой я столкнулся, заключается в том, что я не осознавал, что BroadcastReceiver запускался в отдельном процессе ... когда получатель обновляет результаты последнего запроса приложений, время последней проверки и время следующей проверки, он явно не выполняет это в копия объекта, который использует приложение ;-), поэтому, когда я открываю приложение, оно выглядит устаревшим ...

Я пробовал статические переменные в классе StateManager, которые устанавливаются из вещательного и основного действия, я пытался указать StateManager как подкласс приложения и указать это как android: имя в манифесте ... оба похоже, что в итоге появляются отдельные копии, поэтому состояние, обновленное из вещательного приемника, не является тем, которое видит приложение.

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

Использование базы данных SQLLite для сохранения состояния будет слишком сложной задачей, потому что я хочу сохранить граф объектов, и кажется, что вы этого пока не можете сделать (даже если SQLLite хранит капли, интерфейс Android не покрывает это еще ?). Я, очевидно, тоже не хочу тратить часы на O-R картирование.

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

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

если лучший способ - написать это как службу, то так и будет (если это так, до того, как я начну кодировать ... служба запускается в том же процессе, что и приложение, или я получу аналогичное), это не так делать то, что должен был делать синглтон - проблемы, которые у меня были с вещателем!)

1 Ответ

0 голосов
/ 11 июня 2011

Кажется, я указал android:process=":remote" в разделе получателя манифеста приложения. Удаление этого вызывает запуск Alarm в потоке приложений, который решил проблему.

...