Android-виджет не обновляется, когда он не отображается - PullRequest
0 голосов
/ 06 января 2012

У меня есть виджет, который отсчитывает время.Он находится на главном домашнем экране и, кажется, работает нормально, пока я остаюсь на главном экране, НО, когда я переключаюсь на другой экран на некоторое время, а затем возвращаюсь в ДОМОЙ, виджет начинает отставать.

Кажется, что он не выполняет обновления, пока я был на другом экране, потому что время не обновляется, и теперь он выполняет все обновления вместе, вычисляя время обратного отсчета.Это вызывает лаги и короткие зависания телефона (это когда я звоню обновлять каждую минуту).В случае, если я хочу обновлять каждую секунду - телефон полностью зависает примерно через 20 минут времени блокировки экрана или другого не в фокусе действия.

Вопрос: могу ли я неявно сказать виджету, чтобы продолжить обновления независимо от того, отображается ли оно на экране, или нет?Или как еще можно решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 27 января 2012

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

Но ... ты собираешься высосать из батареи что-нибудь ужасное.Нужно ли что-то делать на каждом тике, или вы можете просто сохранить время последнего розыгрыша, найти текущее время и затем обновить его, пропустив все тики между ними?

И если что-то должно произойти, когда это произойдетХиты ноль, попробуйте использовать Android Alarm.Вы будете намного лучше относиться к времени автономной работы своего пользователя и процессору, делая это иначе.

0 голосов
/ 14 марта 2012

Я не уверен, что вы делаете это или нет, но вы должны использовать класс AlarmManager, чтобы обновить ваш виджет. Не используйте какие-либо темы или что-то, что может вызвать задержку. Я использовал это, и это сработало для меня. Смотрите это

0 голосов
/ 07 января 2012

View.OnFocusChangeListener

Полагаю, вы можете использовать это, чтобы отслеживать, находится ли ваш виджет в фокусе или нет. Проверьте это на Google Docs. Я еще не использовал его сам, поэтому я не уверен, что это сработает, но его определенно стоит попробовать.

http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
...