Use a `CoroutineWorker` scheduled with a unique `PeriodicWorkRequest`. WorkManager persists the request and can run it after the app process is killed or the app is closed. It is the right choice for deferrable server synchronization; execution is not an exact six-hour alarm because Android may defer work for Doze, battery, or other system conditions. ```kotlin class SyncWorker( appContext: Context, workerParams: WorkerParameters, ) : CoroutineWorker(appContext, workerParams) { override suspe...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill android-background-work --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Android Background Work?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-android-background-work-agent-skills-standard)More formats (shields.io, HTML) on the badges page.
# Sync every six hours with WorkManager
Use a `CoroutineWorker` scheduled with a unique `PeriodicWorkRequest`. WorkManager persists the request and can run it after the app process is killed or the app is closed. It is the right choice for deferrable server synchronization; execution is not an exact six-hour alarm because Android may defer work for Doze, battery, or other system conditions.
```kotlin
class SyncWorker(
appContext: Context,
workerParams: WorkerParameters,
) : CoroutineWorker(appContext, workerParams) {
override suspend fun doWork(): Result = try {
syncRepository.syncFromServer()
Result.success()
} catch (error: IOException) {
Result.retry()
} catch (error: Exception) {
Result.failure()
}
}
```
Schedule it once, for example after the user signs in:
```kotlin
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(true)
.build()
val request = PeriodicWorkRequestBuilder<SyncWorker>(
6, TimeUnit.HOURS,
)
.setConstraints(constraints)
.build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"server-data-sync",
ExistingPeriodicWorkPolicy.KEEP,
request,
)
```
`PeriodicWorkRequest` has a 15-minute minimum interval. Use `UPDATE` instead of `KEEP` when a later schedule should replace the existing one. If the sync must be allowed while on battery, omit `setRequiresCharging(true)` but keep the network constraint.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!