Как обновить виджет из приложения? - PullRequest
0 голосов
/ 08 января 2012

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

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

Альтернатива - использование Сервиса.Я бы просто привязал к нему как виджет, так и активность.Проблема в этом случае заключается в том, что я не могу связать с BroadcastReceiver (который является AppWidgetProvider).Проблема заключается в том, что я не могу регулярно обновлять свой виджет.

Мой вопрос: как я (или: могу ли я) спроектировать свое приложение таким образом, чтобы я мог обновить свой виджет из службы (чтобы избавиться от синглтона) или есть лучший способ (может быть BroadcastReceivers)?

1 Ответ

1 голос
/ 08 января 2012

как я (или: могу ли я) спроектировать свое приложение таким образом, чтобы я мог обновить свой виджет из службы (для того, чтобы избавиться от синглтона) или есть лучший способ (возможно, BroadcastReceivers)?

Чтобы обновить виджет приложения, позвоните updateAppWidget() на AppWidgetManager.Это можно сделать в любой момент, а не только из AppWidgetProvider.

. Для периодического обновления виджета приложения используйте android:updatePeriodMillis в метаданных виджета приложения или настройте AlarmManager напрямую.сам.В любом случае вы захотите делегировать работу на IntentService, поскольку "загрузка расписания" - это , а не , что вы хотите сделать в главном потоке приложения - IntentService дает вам фонпоток и автоматически останавливается, когда ваша работа завершена, поэтому вы не занимаете ОЗУ, кроме случаев, когда вы активно выполняете работу.

Для периодического выполнения работы обычно используйте AlarmManager и IntentService.IntentService может, при желании, обновлять виджеты приложений.

...