Действие PeriodicWorkRequestBuilder происходит на 40 лет вперед.Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Действие PeriodicWorkRequestBuilder происходит на 40 лет вперед.

Сообщение Гость »


Я пытаюсь настроить PeriodicWorkRequestBuilder, который будет загружать некоторые данные с наших серверов каждое утро в 5 утра. Я заметил, что рабочий процесс запускается один раз и больше никогда, поэтому мне интересно, что не так с нашей конфигурацией или что-то не так с нашей конфигурацией. Вот моя первоначальная настройка:

Private val uniqueWorkName = MediaDownloadWorker::class.java.simpleName Private const val WORKER_TAG_OUTPUT = "media_download_worker" константное значение FOREGROUND_NOTIFICATION_ID = 20240212 const val DOWNLOAD_NOTIFICATION_CHANNEL_ID = "download_message_notifications" /** Ставит нового работника в очередь для загрузки мультимедиа, только если он еще не поставлен в очередь. */ забавная очередь (контекст: Контекст) { val менеджер = WorkManager.getInstance(контекст) val currentDate = Calendar.getInstance() val DueDate = Calendar.getInstance() // Установить выполнение около 05:00:00. DueDate.set(Calendar.HOUR_OF_DAY, 5) DueDate.set(Календарь.МИНУТА, 0) DueDate.set(Календарь.СЕКУНД, 0) если (dueDate.before(currentDate)) { DueDate.add(Calendar.HOUR_OF_DAY, 24) } val timeDiff = DueDate.timeInMillis - currentDate.timeInMillis ограничения значения = Ограничения.Builder() .setRequiredNetworkType(NetworkType.UNMETERED) .setRequiresBatteryNotLow(истина) .строить() val dailyWorkRequest = PeriodicWorkRequestBuilder(1, TimeUnit.DAYS) .setConstraints(ограничения) .setInitialDelay(timeDiff, TimeUnit.МИЛЛИСЕКУНДЫ) .addTag(WORKER_TAG_OUTPUT) .строить() менеджер.enqueueUniquePeriodicWork( «MediaDownloadWorker», ExistingPeriodicWorkPolicy.KEEP, dailyWorkRequest) } Сам рабочий объект является расширением CoroutineWorker:

class MediaDownloadWorker(private val context: Context, workerParameters: WorkerParameters) : CoroutineWorker(context, workerParameters) { А внутри работника я использую androidx.media3.exoplayer.offline.DownloadManager, чтобы запланировать запрос на загрузку списка файлов. Я явно использую DownloadManager, поскольку именно его мы используем позже для отображения видео и воспроизведения голоса.

val downloadRequest = DownloadRequest.Builder(Util.getUtf8Bytes(mediaUrl).toString(), Uri.parse(mediaUrl)) .setMimeType(mimeType) .строить() downloadManager.addDownload(downloadRequest) Чтобы проверить ситуацию (поскольку обновление обновлялось не более одного раза), я удалил начальную задержку и добавил интервал до 15 минут. Я создал наблюдателя, который извлекает информацию о работнике, и вот что я вижу. Прежде чем он запустится в первый раз, nextScheduleTimeMillis соответствует тому времени, когда оно должно было произойти, через несколько минут (или 5 утра):

Download Worker: WorkInfo{id='03a8deb5-386c-4ac4-a0fd-0be1aa78c8b7', state=ENQUEUED, outputData=Data {}, tags=[worker.MediaDownloadWorker, media_download_worker], Progress=Data {} , runAttemptCount=0, поколение=0, ограничения=Constraints{requiredNetworkType=UNMETERED, requireCharging=false, requireDeviceIdle=false, requireBatteryNotLow=true, requireStorageNotLow=false, contentTriggerUpdateDelayMillis=-1, contentTriggerMaxDelayMillis=-1, contentUriTriggers=[], }, InitialDelayMillis=0, periodityInfo=PeriodicityInfo{repeatIntervalMillis=900000, flexIntervalMillis=900000}, nextScheduleTimeMillis=1709184279367}, stopReason=-256; следующий: 1709184279367 Как только рабочий запускается и я наблюдаю за информацией, nextScheduleTimeMillis оказывается смехотворно далеко в будущем, хотя я очень четко указываю интервал. Вот результат. Обратите внимание, что на метке времени указан 2026 год!

Download Worker: WorkInfo{id='03a8deb5-386c-4ac4-a0fd-0be1aa78c8b7', state=RUNNING, outputData=Data {}, tags=[worker.MediaDownloadWorker, media_download_worker], Progress=Data {} , runAttemptCount=1, поколение=0, ограничения=Constraints{requiredNetworkType=UNMETERED, requireCharging=false, requireDeviceIdle=false, requireBatteryNotLow=true, requireStorageNotLow=false, contentTriggerUpdateDelayMillis=-1, contentTriggerMaxDelayMillis=-1, contentUriTriggers=[], }, InitialDelayMillis=0, periodityInfo=PeriodicityInfo{repeatIntervalMillis=900000, flexIntervalMillis=900000}, nextScheduleTimeMillis=9223372036854775807}, stopReason=-256; следующий: 9223372036854775807 Что может этому помешать? Точно так же мы используем работника для обновления нашего виджета, и он работает просто великолепно. Помогите!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»