我使用 WorkManager 每小时定期更新一次小部件。在I enqueue和inonEnabled
方法中。这是我的方法代码: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 分钟内启动。也许有人知道为什么在安排工作后不直接启动它