Когда oneOffTaks будет выполнен снова с результатом GcmNetworkManager.RESULT_RESCHEDULE

Так из Android SDK для 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 ответ

Основываясь на этой документации, RESULT_RESCHEDULE означает, что ваша задача не выполнена, затем перенесет вашу задачу, поэтому она будет выполнена снова, когда будут выполнены условия.

По умолчанию, если вы вернетесь RESULT_RESCHEDULE от твоего onRunTask, ваше задание будет выполнено снова, как только будут выполнены определенные вами условия (начисление платы, доступ в Интернет).

  • Один из вариантов, если вам нужно только ограничить количество перепланировок, это хранить где-то количество перепланировок, а когда оно достигнет определенного предела, вернуть RESULT_FAILURE вместо RESULT_RESCHEDULE
  • Во-вторых, если вам нужно больше контроля будет возвращаться RESULT_FAILURE и запланируйте задачу OneOff, сделайте ее узнаваемой по некоторому специальному тегу и снова посчитайте, сколько раз вы запланировали ее где-то, таким образом вы сможете контролировать счет и задержку между выполнением задачи

Тем не менее, вы можете проверить этот учебник, когда ваш код часто дает сбой и должен быть повторен. Библиотека Java 7/8 предоставляет богатый и ненавязчивый API с быстрым и масштабируемым решением этой проблемы.

Надеюсь это поможет!

Другие вопросы по тегам