Таймер остановки, когда активность теряет фокус - PullRequest
1 голос
/ 10 ноября 2010

У меня есть таймер, который выполняет TimerTask каждые 30 секунд. Я хочу, чтобы таймер запускал новую задачу TimerTask, если отображается активность, т. Е. Если пользователь получает телефонный звонок или запускает новую операцию, таймер останавливается. Затем мне нужен таймер для перезапуска, когда действие перезапускается и фокусируется.

Теперь это должно быть легко, я переопределяю метод " onWindowFocusChanged (boolean hasFocus) " и запускаю или останавливаю таймер в зависимости от значения hasFocus . Я запускаю таймер, чтобы каждый раз создавать новый объект Timer и TimerTask, а способ остановки таймера - вызывать метод cancel () для объекта Timer и устанавливать для таймера значение null.

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

Я что-то упускаю здесь очевидное? Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Когда я вижу это, это потому, что я создаю 2 CountDownTimers в моем приложении.Поскольку каждый таймер может читать только сообщения типа «1» [см. http://www.devdaily.com/java/jwarehouse/android/core/java/android/os/CountDownTimer.java.shtml], оказалось, что у меня был только 1 таймер, когда мое приложение работало нормально.Я поместил в свой onDestroy функцию timer.cancel (), которая позаботилась об одном из таймеров, что позволило другому таймеру начать получать все сообщения о времени - еще долго после возвращения onDestroy.Существующий таймер перед созданием другого позаботился о затяжном таймере.

0 голосов
/ 10 ноября 2010

У меня была похожая проблема, я закончил тем, что использовал сообщение, задержанное в Теме, и избежал Таймера.Хотя на самом деле не исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...