WorkManager: как обрабатывается сетевое ограничение при использовании AlarmManager? - PullRequest
0 голосов
/ 18 декабря 2018

Похоже, что WorkManager использует AlarmManager для Android-версий старше 21 года, поскольку JobScheduler недоступен.См., Например, здесь .

Но при установке сетевого ограничения с WorkManager в следующих строках:

Constraints.Builder constraintsBuilder = new Constraints.Builder();
constraintsBuilder.setRequiredNetworkType(NetworkType.CONNECTED);
Constraints constraints = constraintsBuilder.build();

OneTimeWorkRequest.Builder workRequestBuilder = new OneTimeWorkRequest.Builder(MyWorker.class);
workRequestBuilder.setInitialDelay(5000, TimeUnit.MILLISECONDS);
workRequestBuilder.setConstraints(constraints);

При использовании JobScheduler поведение выглядит так, что запланированное заданиебудет просто сидеть там до тех пор, пока сеть не будет восстановлена, а затем немедленно сработает, потому что ограничения теперь выполнены.

Но сигналы тревоги немного отличаются и, естественно, не имеют связанных ограничений.Так как же на самом деле обрабатывается сетевое ограничение для Android <21, когда оно опирается на AlarmManager?Если сигнал тревоги срабатывает при отсутствии сети, что происходит тогда?Пока что мой ограниченный опыт заключается в том, что это плохо обрабатывается (или вообще), и мне интересно, нужно ли обрабатывать сетевое ограничение вручную, слушая <code>CONNECTIVITY_CHANGE?

1 Ответ

0 голосов
/ 18 декабря 2018

WorkManager уже прослушивает CONNECTIVITY_CHANGE - то, что он использует сигналы тревоги, не означает, что это единственный сигнал, который он использует.Вам ничего не нужно делать вручную;WorkManager выполняет все функции отслеживания ограничений за вас.

...