取消计时器

时间:2011-07-02 11:01:01

标签: java android timer

我的记录器类中有计时器问题。我创建了自己的记录器,它应该尽可能简单 - 用户只能调用静态log()方法。每个调用log()方法都会导致日志对象(消息,时间,附加信息)添加到日志列表中 当用户第一次调用此方法 时,logger还会启动一个新的Timer,它会每隔30秒将列表中的所有日志保存到文件中。

但是,我不知道在哪里调用timer.cancel()方法。我不想强迫用户在他的代码中执行此操作。是否有必要一直取消计时器?或者这种方法只是在用户需要时停止。

2 个答案:

答案 0 :(得分:1)

关闭钩子就是这样。阅读警告和说明here。还要考虑this为android解决方案预先写入日志文件

答案 1 :(得分:1)

但在这种情况下你根本不需要关机钩子。当VM关闭时,所有线程都将被取消,所有打开的文件都将被关闭,所以不用担心。

我相信你想要的是避免任务每30秒连续醒来,即使应用程序没有做任何事情。我建议做一点不同的事情:

每当你在log方法中记录一些东西时:

  • 存储日志条目
  • 检查是否有等待执行的计时器任务(一个布尔不稳定的'taskRunning'标志)。如果不是 - 延迟30秒的激活任务,但只有ONCE(不重复)并将taskRunning标志设置为true。如果flag设置为true - 什么都不做。
  • 在你的计时器任务中
  • :清除'taskRunning'标志,写下目前为止存储的所有日志,并且......不要激活另一个任务。没必要。每当有人写日志文件时,它将启动另一个任务,该任务将在30秒之后写入日志。

请注意。为了避免竞争,您还需要在日志读/写上进行一些同步。