首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果上一次还没有完成,如何防止gcmTaskService periodicTask再次运行?

如果上一次还没有完成,如何防止gcmTaskService periodicTask再次运行?
EN

Stack Overflow用户
提问于 2016-02-20 22:19:58
回答 1查看 253关注 0票数 1

我设置了一个大约每隔60秒运行一次的periodicTask。它应该只需要一两秒钟就可以运行,所以不太可能发生任何重叠,但是如果上一次运行挂起或其他什么,我检测到这一点并跳过当前运行的最好方法是什么?

另外,有没有办法从新的运行中杀死前一次运行?或者我必须等到3分钟计时器用完?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-06-02 10:52:36

是的,在扩展GcmTaskService的服务中,您必须使用强制的setTag()方法来设置任务构建器中的标签,无论它是or任务还是周期性任务。现在根据官方文件,标签是:

此任务的字符串标识符。对相同标记的连续计划调用将更新具有相同标记的任何预先存在的任务。

因此,如果您的onRunTask()方法需要5秒才能完成,并且您计划在1秒内使用相同的标记启动服务,那么它将被更新。参考:https://developers.google.com/android/reference/com/google/android/gms/gcm/OneoffTask.Builder.html#inherited-field-summary

您可以做的是使onRunTask()方法成为线程安全的。根据:https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmTaskService

请记住,您的服务可能会同时接收来自调度器的多个调用(特别是如果您发出了多个重叠的调度请求)。如果是这样的话,您的onRunTask(com.google.android.gms.gcm.TaskParams)实现必须是线程安全的。

但就像你提到的情况一样,可能不会发生重叠。但是如果你想确保这一点,那么你可以做的是使用某种锁,它在任务执行时被启用,并将您的逻辑置于检查锁状态的条件中。

现在,当您按照逻辑执行任务时,将获取锁,因此条件将失败。并且onRunTask()将返回而不执行您的任务。任务完成后,您释放锁,当定期服务再次运行时,条件将为真,您的任务将再次运行。

我希望这能解决你的疑虑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35524515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档