我有一个Android应用程序,我必须在20-30秒内以非常短的间隔执行一些任务。这是一项要求,它在某种程度上是一个“监控”应用程序,它不会用于商业目的,因此无需担心电池和数据的使用。
我正在使用java.util.Timer
来安排任务,如下所示:
mTimer.scheduleAtFixedRate(mUpdateDataTask,0,20000);
我知道如何使用以下方法停止正在执行的任务:
mTimer.cancel();
我在Service
停止时这样做。
问题:
如果我的应用程序在某些时候崩溃,则onDestroy()
的{{1}}方法未被调用,Service
永远不会被取消,并且这些任务将继续执行。如何在我的应用程序崩溃或从“设置” - >“应用程序”强行停止时取消它们?
答案 0 :(得分:1)
您需要调查UncaughtExceptionHandler
作为捕捉崩溃的方法;你可以在这个处理程序中取消计时器。
答案 1 :(得分:0)
我建议用try-catch块包装你的代码,如果应用程序崩溃,请在finally块中进行所有清理。
答案 2 :(得分:0)
您还可以让您的任务包含对Service
的弱引用,并且每次执行时,检查Service
是否仍然有效。不是最漂亮的解决方案,但可能有效;)