2010-11-10 41 views
1

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

现在,这应该是很容易的,我覆盖“onWindowFocusChanged(布尔hasFocus)”方法和开始或停止取决于hasFocus值定时器。我启动定时器的方式是每次创建一个新的Timer对象和TimerTask,而我停止Timer的方式是调用Timer对象上的cancel()方法,并将timer设置为null。

我的问题是,这并不总是工作,如果我启动具有定时器和快速开关方向的活动(开始/停止活动),我发现定时器并不总是被取消,我最终得到多个定时器以不断增加的速度启动TimerTasks。

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

感谢

回答

0

我有一个类似的问题,我结束了使用后的线程延迟,避免了定时器。虽然不是一个修复。

1

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

在创建另一个定时器之前取消任何现有的定时器,保留了定时器。

相关问题