WorkManager не запускает работу, если приложение не запущено - PullRequest
0 голосов
/ 08 апреля 2020

Я использую WorkManager для периодического обновления виджета один раз в час. В onEnabled методе AppwidgetProvider я ставлю в очередь PeriodicWorkRequest и cancelAllWorkByTag в onDisabled. Вот мой код из метода onEnabled:

        val constraints = Constraints.Builder()
            .setRequiresBatteryNotLow(true)
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

        val request = PeriodicWorkRequestBuilder<Worker>(1, TimeUnit.HOURS)
            .addTag(workTag)
            .setInputData(workDataOf(EXTRA_WIDGET_TAG to workTag))
            .setConstraints(constraints)
            .build()

        WorkManager.getInstance(context).enqueue(request)

Мне нужно настроить виджет без запуска приложения, поэтому при установке приложения я не открываю его и не устанавливаю виджет на главном экране. Проблема в том, что метод onStartJob не вызывается без первого запуска приложения, и я не понимаю, почему. Это журналы, которые я получил:

D/Widget: onEnabled
D/WM-PackageManagerHelper: androidx.work.impl.background.systemjob.SystemJobService enabled
D/WM-Schedulers: Created SystemJobScheduler and enabled SystemJobService
D/WM-ForceStopRunnable: Performing cleanup operations.
D/Widget: onUpdate
D/WM-ForceStopRunnable: Application was force-stopped, rescheduling.
D/WM-PackageManagerHelper: androidx.work.impl.background.systemalarm.RescheduleReceiver enabled
D/WM-SystemJobScheduler: Scheduling work ID 35106262-167d-4fc3-96bb-d2acddb7ad79 Job ID 0
D/Widget: Status: [WorkInfo{mId='35106262-167d-4fc3-96bb-d2acddb7ad79', mState=ENQUEUED, mOutputData=Data {}, mTags=[Worker, tag], mProgress=Data {}}]
D/Widget: onUpdate

А это журналы, когда приложение запускалось, а затем настраивался виджет

D/Widget: onEnabled
D/WM-PackageManagerHelper: androidx.work.impl.background.systemjob.SystemJobService enabled
D/WM-Schedulers: Created SystemJobScheduler and enabled SystemJobService
D/WM-ForceStopRunnable: Performing cleanup operations.
D/Widget: onUpdate
D/WM-ForceStopRunnable: Application was force-stopped, rescheduling.
D/WM-PackageManagerHelper: androidx.work.impl.background.systemalarm.RescheduleReceiver enabled
D/WM-SystemJobScheduler: Scheduling work ID d9ce2765-dcb4-4f69-8187-4f429ad39c0d Job ID 0
D/WM-SystemJobService: onStartJob for d9ce2765-dcb4-4f69-8187-4f429ad39c0d
D/Widget: Status: [WorkInfo{mId='d9ce2765-dcb4-4f69-8187-4f429ad39c0d', mState=ENQUEUED, mOutputData=Data {}, mTags=[Worker, tag], mProgress=Data {}}]
D/WM-Processor: Processor: processing d9ce2765-dcb4-4f69-8187-4f429ad39c0d
D/WM-WorkerWrapper: Starting work for Worker
D/Widget: doWork
D/Widget: Status: [WorkInfo{mId='d9ce2765-dcb4-4f69-8187-4f429ad39c0d', mState=RUNNING, mOutputData=Data {}, mTags=[Worker, tag], mProgress=Data {}}]
D/Widget: onUpdate
D/WM-WorkerWrapper: Worker returned a Success {mOutputData=Data {}} result.
D/Widget: onUpdate
D/WM-SystemJobScheduler: Scheduling work ID d9ce2765-dcb4-4f69-8187-4f429ad39c0d Job ID 0
D/WM-Processor: Processor d9ce2765-dcb4-4f69-8187-4f429ad39c0d executed; reschedule = false
D/WM-SystemJobService: d9ce2765-dcb4-4f69-8187-4f429ad39c0d executed on JobScheduler
D/WM-SystemJobService: onStopJob for d9ce2765-dcb4-4f69-8187-4f429ad39c0d
D/WM-Processor: Processor stopping background work d9ce2765-dcb4-4f69-8187-4f429ad39c0d
D/WM-Processor: WorkerWrapper could not be found for d9ce2765-dcb4-4f69-8187-4f429ad39c0d
D/WM-StopWorkRunnable: StopWorkRunnable for d9ce2765-dcb4-4f69-8187-4f429ad39c0d; Processor.stopWork = false
D/Widget: Status: [WorkInfo{mId='d9ce2765-dcb4-4f69-8187-4f429ad39c0d', mState=ENQUEUED, mOutputData=Data {}, mTags=[Worker, tag], mProgress=Data {}}]

Я заметил, что метод onStartJob иногда можно запустить без приложения Первый запуск через 3 минуты, иногда через 30 минут. Может быть, кто-то знает, почему он не запускается сразу после запланированного задания

...