Идентификаторы виджетов приложений, но нет виджетов

В настоящее время я работаю над созданием некоторых виджетов приложений для своего приложения; один из них — виджет с часами, который требует обновления каждые 60 секунд. Поэтому я создаю сигнал тревоги в функции onEnabled() AppWidgetProvider, которая отправляет намерение обновления часов каждые 60 секунд, которое получает appwidgetprovider; это работает как шарм, однако мне бы хотелось избавиться от таймера, когда больше нет виджетов часов, так как мне нравится поддерживать порядок. Поэтому я удаляю будильник в функции onDisabled() AppWidgetProvider, так как он вызывается при удалении последнего типа виджета.

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

Это обычное поведение, и я не должен полагаться на вызов onDisabled(), это ошибка или я делаю что-то ужасно неправильно?


person MrJre    schedule 07.07.2011    source источник


Ответы (1)


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

Кроме того, использование только onEnabled и onDisabled — очень плохая идея для ваших целей. Даже когда экран выключен, ваши виджеты будут продолжать обновляться. Ваше устройство никогда не будет спать по-настоящему, и батарея будет разряжаться слишком быстро. Хотя бы добавьте Receiver для ScreenOn и ScreenOff!

person Mark    schedule 11.07.2011
comment
Эй, Марк, спасибо за ваш ответ, но: - Я разрабатываю для уровня API 5 и выше, поэтому ошибки виджетов-призраков до API5 не являются проблемой, извините, что не разъяснил это - Я использую будильник без пробуждения, поэтому мои виджеты не будут t продолжают обновляться при выключенном экране как я понял - person MrJre; 12.07.2011
comment
Я читал об этом дальше, и проблема, похоже, все еще в текущих версиях. Это ошибка, известная Google уже 2 года :( - person Mark; 12.07.2011
comment
При дальнейшем исследовании это происходит, когда действие по настройке виджета отменяется. См. stackoverflow.com/questions/4393144/ - person MrJre; 18.07.2011