3

所以来自 GcmNetworkManager 的 Android SDK

公共静态最终 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);

在我的服务里面

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

当执行失败时,会返回RESULT_RESCHEDULE,并重试。所以我想知道什么时候会重试?

谢谢

4

1 回答 1

2

根据this documentationRESULT_RESCHEDULE意味着您的任务失败然后重新安排您的任务,因此在满足条件时将再次执行。

默认情况下,如果您RESULT_RESCHEDULE从中返回,则只要onRunTask满足您为其定义的条件(充电、互联网可​​用),您的任务就会再次执行。

  • 一种选择,如果您只需要限制重新安排的次数,就是将重新安排的次数存储在某处,当达到您定义的限制时,返回RESULT_FAILURE而不是RESULT_RESCHEDULE
  • 第二个,如果您需要更多控制权,可以返回RESULT_FAILURE并安排 OneOff 任务,通过一些特殊标签使其可识别,然后再次计算您在某处安排了多少次,这样您就可以控制执行之间的计数和延迟任务的

但是,当您的代码经常失败并且必须重试时,您可以查看本教程。Java 7/8 库提供了丰富且不显眼的 API,并为这个问题提供了快速且可扩展的解决方案。

希望这可以帮助!

于 2017-02-08T08:28:25.550 回答