Ответ
Разрабатывал фичу для оффлайн-режима в приложении. Столкнулся с проблемой синхронизации данных при восстановлении соединения. Реализовал механизм очереди запросов с экспоненциальной задержкой повторов.
class SyncWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
val pendingRequests = database.getPendingRequests()
return try {
pendingRequests.forEach { request ->
api.sync(request).also {
database.deletePendingRequest(request.id)
}
}
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
Использовал WorkManager для фоновой синхронизации и Room для хранения pending-запросов. Добавил обработку конфликтов при параллельном изменении данных.