在应用程序崩溃时取消TimerTask

时间:2012-03-20 17:05:13

标签: android android-service

我有一个Android应用程序,我必须在20-30秒内以非常短的间隔执行一些任务。这是一项要求,它在某种程度上是一个“监控”应用程序,它不会用于商业目的,因此无需担心电池和数据的使用。

我正在使用java.util.Timer来安排任务,如下所示:

mTimer.scheduleAtFixedRate(mUpdateDataTask,0,20000);

我知道如何使用以下方法停止正在执行的任务:

mTimer.cancel();

我在Service停止时这样做。

问题: 如果我的应用程序在某些时候崩溃,则onDestroy()的{​​{1}}方法未被调用,Service永远不会被取消,并且这些任务将继续执行。如何在我的应用程序崩溃或从“设置” - >“应用程序”强行停止时取消它们?

3 个答案:

答案 0 :(得分:1)

您需要调查UncaughtExceptionHandler作为捕捉崩溃的方法;你可以在这个处理程序中取消计时器。

答案 1 :(得分:0)

我建议用try-catch块包装你的代码,如果应用程序崩溃,请在finally块中进行所有清理。

答案 2 :(得分:0)

您还可以让您的任务包含对Service的弱引用,并且每次执行时,检查Service是否仍然有效。不是最漂亮的解决方案,但可能有效;)