WorkManager not starting job if application is not launched

698 Views Asked by At

I use WorkManager to periodically update widget once in hour. In onEnabled method of AppwidgetProvider I enqueue PeriodicWorkRequest and cancelAllWorkByTag in onDisabled. Here is my code from onEnabled method:

        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)

I need to setup widget without app launch, so when I install application I don't open it and setup widget on Home Screen. The problem is that onStartJob method not called without app first launch and I don't understand why. These are logs that I got:

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

And these are logs when app was launched and then widget was setup

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 {}}]

I noticed that onStartJob method sometimes can launch without app first launch in 3 minutes, sometimes in 30 minutes. Maybe someone know why it is not launched directly after job was scheduled

0

There are 0 best solutions below