2013-12-20 3 views
0

У меня есть виджет, который обслуживается службой в моем коде. Теперь, когда приложение принудительно остановлено, служба также останавливается. или из-за какого-то приложения-убийцы задачи, если моя служба приложения убита.Состояние виджета приложения Когда фоновое обслуживание убито

Итак, теперь некому обновлять виджет, и виджет действует как зомби.

Теперь, если я запускаю активность приложения, виджет не может быть восстановлен, так как у меня нет идентификатора виджета.

Каков наилучший способ справиться с такими ситуациями?

ответ

0

Можете ли вы использовать LocalBroadcastManager, чтобы уведомить вашу службу о том, что виджет готов для получения обновлений снова? (передача идентификатора виджета). Например, в методе onUpdate вашего WidgetProvider.

+0

Скажем, есть виджет, отображающий скорость движения автомобиля, использующего GPS. Таким образом, виджет нужно обновлять каждые 20 секунд или около того. В этом случае OnUpdate будет вызываться не менее чем на 30 минут. В промежутке между сбоем службы из-за андроида/некоторых убийц задачи, как обновить виджет. – mSO

+0

Ведение списка настроенных виджетов (и их идентификатора виджета) в SharedPreferences. Когда начнется ваше обслуживание, прочитайте список и используйте его соответствующим образом. – Kuffs

+0

:) Хорошо, я сделал это в конце концов, но я думал, что это плохой взлом. У меня на самом деле есть 3 сущности WakeAliveService в моем коде, WidgetUpdateService и AppWidgetProvider. WakeAliveService отправляет периодические трансляции, которые подхватывает WidgetUpdateService для обновления виджетов в списке, хранящемся в ApplicationClass. AppWidgetProvider обновляет список с помощью идентификаторов в OnUpdate/OnDelete. Когда идентификатор виджета обновляется, список сохраняется обратно в prefs. Когда приложение запускается снова, список читается. При перезагрузке этот список очищается. Считаете ли вы, что это правильный подход? – mSO

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