什么时候会再次执行oneOffTask并返回GcmNetworkManager.RESULT_RESCHEDULE结果?

3

因此,从Android SDK for GcmNetworkManager

public static final int RESULT_RESCHEDULE

表示任务执行失败,必须采用退避重试的方式重新尝试。

Task task = new OneoffTask.Builder()
                    .setService(MyService.class)
                    .setExecutionWindow(0, 15)
                    .setUpdateCurrent(true)
                    .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
                    .setRequiresCharging(false)
                    .build();
            mGcmNetworkManager.schedule(task);

在MyService内部

public int onRunTask(TaskParams taskParams) {
    /** task execution logic here */
    if (success) {
        return RESULT_SUCCESS;
    } else {
        return RESULT_RESCHEDULE;
    }
}

当执行失败时,它将返回RESULT_RESCHEDULE,并且将进行重试。那么我想知道它什么时候会重试?

谢谢。

1个回答

2
根据此文档RESULT_RESCHEDULE 表示您的任务失败,然后重新安排您的任务,因此当满足条件时,它将再次执行。
默认情况下,如果您从 onRunTask 返回 RESULT_RESCHEDULE,则只要满足您为其定义的条件(充电、可用互联网),您的任务就会再次执行。
有两种选择: 一种是,如果您仅需要限制重新安排的次数,则可以在某处存储重新安排的次数,并在达到您定义的限制时返回 RESULT_FAILURE 而不是 RESULT_RESCHEDULE。 另一种是,如果您需要更多控制,可以返回 RESULT_FAILURE 并安排一个 OneOff 任务,使其具有某些特殊标记并再次计算您已在某处安排了多少次,这样您就能够控制任务的执行次数和延迟。
然而,当您的代码经常失败并且必须重试时,您可以查看这个tutorial。Java 7/8库提供了丰富和不显眼的API,以快速和可扩展的解决方案来解决这个问题。
希望这能帮到您!

谢谢您的描述。我现在理解得更好了。那个库对我的情况可能有点重,但是非常好的推荐。 - Xiaogegexiao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接