Когда 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 с быстрым и масштабируемым решением этой проблемы.
Надеюсь это поможет!