Я считаю, что вы должны использовать какой-то менеджер, который может справиться с задачей за вас.
У Android в настоящее время есть библиотека Диспетчер работы , которая прекрасно справляется с этим.
С WorkManager
вы можете запланировать OneTimeWorkRequest
или PeriodicWorkRequest
.
Еще одним преимуществом является то, что вам необязательно самостоятельно прослушивать состояние подключения, поскольку вы можете указать / настроить это и многие другие в ограничениях, передаваемых WorkManager
.
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresDeviceIdle(true)
.setRequiresCharging(true)
.build()
И да, он также может обрабатывать повторные попытки, если сеть довольно плохая, просто указав backOffCriteria
.
val workRequest = OneTimeWorkRequest.Builder(RequestWorker::class.java)
.setInputData(mapOf("record_id" to recordId).toWorkData())
.setConstraints(constraints)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES)
.build()
Если вас также интересует состояние задания / работы, вы можете наблюдать LiveData<WorkStatus>
, позвонив по номеру getStatusById(workId)