Oppo Realme1 Job Schduler Мин. Интервал для периодической работы составляет 1 час.

В настоящее время я использую WorkManager 1.0.0-alpha05. Я установил периодический запрос на работу, используя ниже code. Если интервал меньше 1 часа, то в Oppo Realme (версия Android - 8.1.0, ColorOSVersion V5.0) задание выполняется в 1 час. Когда интервал превышает 1 ч, задание выполняется в точное время. если интервал меньше 1 часов, задание выполняется в 1 час.

Пожалуйста, дайте мне знать любой требуемый журнал или информацию:

Код для периодической работы по расписанию:

PeriodicWorkRequest uploadWork = new PeriodicWorkRequest.
                Builder(LocationUpdatesJobService.class ,interval, TimeUnit.MILLISECONDS)
                .addTag(Constants.Location.TAG_BACKGROUND_LOCATION_PERIODIC)
                .setConstraints(constraints).build();
            WorkManager.getInstance().enqueueUniquePeriodicWork(
                    Constants.Location.TAG_BACKGROUND_LOCATION_PERIODIC,
                    ExistingPeriodicWorkPolicy.REPLACE, uploadWork);

во всех остальных устройствах интервал запроса периодической работы правильный. В Oppo Realme 1 работа выполняется 1 час.

Oppo Realme 1: интервал 15 минут

Я отлаживаю Job Schduler, используя следующую команду: adb shell dumpsys jobscheduler

JOB #u0a249/18: cc2fc59 com.cygneto.field_sales/androidx.work.impl.background.systemjob.SystemJobService
u0a249 tag=job/com.cygneto.field_sales/androidx.work.impl.background.systemjob.SystemJobService
Source: uid=u0a249 user=0 pkg=com.cygneto.field_sales
JobInfo:
Service: com.cygneto.field_sales/androidx.work.impl.background.systemjob.SystemJobService
PERIODIC: interval=+1h0m0s0ms flex=+21m0s0ms
Requires: charging=false batteryNotLow=false deviceIdle=false
Extras: mParcelledData.dataSize=180
Backoff: policy=1 initial=+30s0ms
Has early constraint
Has late constraint
Required constraints: TIMING_DELAY DEADLINE
Satisfied constraints: APP_NOT_IDLE DEVICE_NOT_DOZING
Unsatisfied constraints: TIMING_DELAY DEADLINE
Doze whitelisted: true
Tracking: TIME
Enqueue time: -9m4s617ms
Run time: earliest=+29m55s383ms, latest=+50m55s383ms
Ready: false (job=false user=true !pending=true !active=true !backingup=true comp=true)

Oppo Realme 1: интервал 1 час 10 минут

Журнал:

JobInfo:
Service: com.cygneto.field_sales/androidx.work.impl.background.systemjob.SystemJobService
PERIODIC: interval=+1h10m0s0ms flex=+1h10m0s0ms
Requires: charging=false batteryNotLow=false deviceIdle=false
Extras: mParcelledData.dataSize=180
Doze whitelisted: true
Tracking: TIME
Enqueue time: -4m19s846ms
Run time: earliest=+1h5m39s833ms, latest=+2h15m39s833ms
Last successful run: 2018-07-25 17:01:23
Ready: false (job=false user=true !pending=true !active=true !backingup=true comp=true)

Другое устройство:

Журнал:

JobInfo:
Service:com.cygneto.field_sales/androidx.work.impl.background.systemjob.SystemJobService
    PERIODIC: interval=+15m0s0ms flex=+15m0s0ms
    Requires: charging=false batteryNotLow=false deviceIdle=false
    Tracking: TIME
    Enqueue time: -29s237ms
    Run time: earliest=+14m30s690ms, latest=+29m30s690ms
    Last successful run: 2018-07-25 17:29:19
    Ready: false (job=false user=true !pending=true !active=true !backingup=true comp=true)

Я также пытаюсь использовать другую библиотеку. Я обнаружил такое же поведение в планировщике заданий и Android-Job. Продолжительность периода задания составляет 15 минут, но выполняется через 1 час, но когда я пытаюсь использовать диспетчер заданий firebase, задание выполняется с правильным интервалом в 15 минут.

Я отлаживаю планировщик заданий и Android-задание, используя следующую команду: adb shell dumpsys jobscheduler

Планировщик заданий:

Интервал: 15 мин. Выход: 1 час

Журнал:

JOB #u0a266/1: a0dd846 com.jobscheduler_periodic/com.periodic.JobSchedulerService
    u0a266 tag=*job*/com.jobscheduler_periodic/com.periodic.JobSchedulerService
    Source: uid=u0a266 user=0 pkg=com.jobscheduler_periodic
    JobInfo:
      Service: com.jobscheduler_periodic/com.periodic.JobSchedulerService
      PERIODIC: interval=+1h0m0s0ms flex=+15m0s0ms

Android-Job:

Интервал: 15 минут Выход: 1 час:

Журнал:

JOB #u0a266/3: 10c0d65 com.jobscheduler_periodic/com.evernote.android.job.v21.PlatformJobService
    u0a266 tag=*job*/com.jobscheduler_periodic/com.evernote.android.job.v21.PlatformJobService
    Source: uid=u0a266 user=0 pkg=com.jobscheduler_periodic
    JobInfo:
      Service: com.jobscheduler_periodic/com.evernote.android.job.v21.PlatformJobService
      PERIODIC: interval=+1h0m0s0ms flex=+5m0s0ms

Диспетчер заданий Firebase:

Я отлаживаю диспетчер заданий firebase, используя следующую команду: adb shell "dumpsys activity service GcmService | grep com.jobscheduler_periodic"

Интервал: 15 мин. Вывод: 15 мин.

Журнал:

u0|com.jobscheduler_periodic: 1
    (scheduled) com.jobscheduler_periodic/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="MyJobService" trigger=window{s
tart=720s,end=900s,earliest=46s,latest=226s} requirements=[NET_CONNECTED,CHARGING] attributes=[RECURRING] scheduled=-673s last_
run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}

person Bhargav Pandya    schedule 25.07.2018    source источник


Ответы (1)


Это ошибка OEM. К сожалению, очень сложно обойти такие ошибки, экономя заряд батареи. Если вам нужен период в 15 минут, я предлагаю использовать следующий обходной путь:

Используйте OneTimeWorkRequest вместо периодического запроса на работу, и при первом выполнении первого запроса на работу запланируйте второй изнутри рабочего с initialDelay 15 mins. По сути, это даст вам то, что вы хотите.

person Rahul    schedule 27.07.2018
comment
Спасибо за ответ. Я пробовал использовать OneTimeWorkRequest, и он работает нормально. Но я не понимаю, когда я пытаюсь выполнить периодическое задание с использованием задания диспетчера заданий firebase в правильное время. Внутренний диспетчер заданий Firebase не планирует задание с помощью планировщика заданий? в планировщике заданий android-job, когда периодическое задание менее 1 часа (15,20 минут), задание выполняется за 1 час в противоположной области, кроме диспетчера заданий firebase. - person Bhargav Pandya; 30.07.2018
comment
FirebaseJobDispatcher использует GCMNetworkManager за кулисами. Он не использует JobScheduler. - person Rahul; 10.08.2018
comment
Спасибо за ответ. Я попробую WorkManager с FirebaseJobDispatcher (android.arch.work:work-firebase). Я проверю, когда использовать WorkManager с FirebaseJobDispatcher, чем работа выполняется с интервалом 15 минут или 1 час в другой области ?. Итак, если я использую WorkManager с FirebaseJobDispatcher, чем все расписание задач с использованием GCMNetworkManager правильно? - person Bhargav Pandya; 11.08.2018
comment
WorkManager будет использовать FJD, только если SDK_LEVEL ‹= 22. Таким образом, для API 23 и выше он всегда будет использовать JobScheduler. - person Rahul; 13.08.2018
comment
Спасибо за ответ на все мои сомнения, связанные с FirebaseJobDispatcher, JobScheduler, WorkManager. - person Bhargav Pandya; 14.08.2018