0

我使用 WorkManager 每小时定期更新一次小部件。在I enqueue和inonEnabled方法中。这是我的方法代码:AppwidgetProviderPeriodicWorkRequestcancelAllWorkByTagonDisabledonEnabled

        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 分钟内启动。也许有人知道为什么在安排工作后不直接启动它

4

0 回答 0