class NetWorkWorker(
context: Context,
params: WorkerParameters
): CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
val response = dataFromServer()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
private fun dataFromServer(): Any {
return 0
}
}
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresBatteryNotLow(true)
.build()
val periodicWorkRequest = PeriodicWorkRequestBuilder<NetWorkWorker>(15, TimeUnit.MINUTES)
.setConstraints(constraints)
.build()
val oneTimeWorkRequest = OneTimeWorkRequestBuilder<NetWorkWorker>()
.setConstraints(constraints)
.build()
fun dispatcher(context: Context) {
WorkManager.getInstance(context).enqueue(periodicWorkRequest)
WorkManager.getInstance(context).cancelWorkById(periodicWorkRequest.id)
}
fun handleResult(context: Context, lifecycleOwner: LifecycleOwner) {
WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(periodicWorkRequest.id)
.observe(lifecycleOwner) { workInfo ->
workInfo?.let {
if (workInfo.state.isFinished) {
}
}
}
}