gpt4 book ai didi

java - 如果之前没有完成,如何防止 gcmTaskService periodicTask 再次运行?

转载 作者:行者123 更新时间:2023-11-30 01:32:48 25 4
gpt4 key购买 nike

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

还有,有没有办法从新的运行中杀死之前的运行?还是我必须等到 3 分钟计时器用完?

谢谢!

最佳答案

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

此任务的字符串标识符。对同一标签的连续调度调用将更新具有同一标签的任何预先存在的任务。

因此,如果您的 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() 将在不执行您的任务的情况下返回。任务完成后,您释放锁,当服务再次定期运行时,条件将为真,您的任务将再次运行。

希望这能解决你的疑惑。

关于java - 如果之前没有完成,如何防止 gcmTaskService periodicTask 再次运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35524515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com