Что касается формата таблицы workSpec, это, очевидно, детали реализации, которые могут измениться в будущем.Я бы не стал вносить какие-либо изменения непосредственно в него или предполагать, что некоторая конкретная информация хранится в определенном формате.
То, что в настоящее время хранится там, можно увидеть из WorkSpec
источника .Часть этой информации доступна через API WorkManager.Например, вы можете получить доступ к количеству попыток как внутри вашего Worker (ListenableWorker#getRunAttemptCount()
), так и через WorkInfo
(добавлен WorkManager v2.1.0-alpha01 `WorkInfo # getRunAttemptCount () '.
Но опять же, вы никогда не должны вносить какие-либо изменения непосредственно в таблицы WorkManager или полагаться на его конкретный формат.
По другим вопросам:
Уменьшите размер БД WorkManager
Когда вы создаете свой WorkRequest, вы можете указать, как долго вам нужно хранить этот workRequest в БД, используя keepResultsForAtLeast()
. Имейте в виду, что после того, как WorkRequest будет удален из БД, выне может получить больше информации о нем. Другой, более радикальный и опасный вариант - использовать WorkManager#pruneWork()
. В этом случае WorkManager удаляет из БД всю законченную работу. Опять же, после этой операции это невозможнобольше для доступа к WorkRequest WorkInfo
.
PeriodicWorker без повторов
Было бы полезно увидеть, как вы создаете WorkRequest и код Worker, oНа каком устройстве / ОС вы видели такое поведение, и какую версию WorkManager вы используете.
Неточный интервал для PeriodicWorker
WorkManager пытается соблюдать параметры WorkRequest, совместимые со стратегиями оптимизации батареи ОС Android(в основном режим доза).Это может привести к смещению работника в ближайшем окне обслуживания .