2

現在、私は使用してWorkManager 1.0.0-alpha05います。以下を使用して定期的なWork Requestを設定しますcode。間隔が 1 時間未満の場合Oppo Realme、(Android バージョン - 8.1.0 ではColorOSVersion V5.0) 時間にジョブが実行され1ます。時間間隔を超える1と、正確な時刻にジョブが実行されます。interval が hr より小さい場合1、ジョブは1hr で実行されます。

必要なログまたは情報をお知らせください:

スケジュール定期ジョブのコード:

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)

また、別のライブラリを使用してみます。Job Scheduler と 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 ジョブ:

間隔: 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 job Dispatcher をデバッグします: 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}
4

1 に答える 1