活动失去焦点时停止计时器

时间:2010-11-10 10:26:59

标签: android timer focus

我有一个Timer,它每30秒执行一次TimerTask。如果显示活动,我只希望计时器启动新的TimerTask,即如果用户接到电话或启动新的活动,Timer将停止。然后我需要在重新启动Activity时重启Timer并重新启动。

现在这应该很简单,我覆盖“ onWindowFocusChanged(boolean hasFocus)”方法,并根据 hasFocus 的值启动或停止计时器。我启动计时器的方法是每次创建一个新的Timer对象和TimerTask,我停止Timer的方法是调用Timer对象上的 cancel()方法并将timer设置为null。 / p>

我的问题是这并不总是有效,如果我快速启动具有定时器和切换方向的活动(启动/停止活动)我发现定时器并不总是被取消,我最终会启动多个定时器TimerTasks的速度越来越快。

我错过了一些明显的东西吗?任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

当我看到这个时,这是因为我在我的应用中创建了2个CountDownTimers。因为每个计时器只能读取“1”类型的消息[见http://www.devdaily.com/java/jwarehouse/android/core/java/android/os/CountDownTimer.java.shtml],所以我的应用程序运行正常时,我只有1个计时器。我在我的onDestroy中放了一个“timer.cancel()”来处理其中一个定时器,允许另一个定时器开始接收所有定时消息 - 在onDestroy返回后很久。

在创建另一个计时器之前取消任何现有计时器可以处理延迟计时器。

答案 1 :(得分:0)

我有一个类似的问题,我最后在一个线程中使用post延迟并避免使用Timer。虽然不是真正的修复。