WorkManager を使用して、ウィジェットを 1 時間に 1 回定期的に更新します。I enqueueの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 分で起動できる場合があることに気付きました。ジョブがスケジュールされた直後に起動されない理由を誰かが知っているかもしれません