WorkManager ve Arka Plan Görevleri
WorkManager ile garantili arka plan çalışmalarını zamanlayın. OneTimeWorkRequest, PeriodicWorkRequest, kısıtlamalar, veri aktarımı ve çalışma zincirlerini kullanın.
WorkManager ve Arka Plan Görevleri, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 5. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.
Android'de Arka Plan Çalışmaları
Android, pil tasarrufu sağlamak için arka plan çalışmalarını sıkı biçimde kısıtlar. WorkManager'dan önce geliştiriciler şunları kullanıyordu:
- AsyncTask (kullanımdan kaldırıldı)
- AlarmManager (yeniden başlatmalar ve Doze genelinde güvenilir değil)
- JobScheduler (karmaşık API)
- Hizmetler (sonlandırılabilir, yeniden deneme desteği yok)
WorkManager, ertelenebilir ve garanti edilen arka plan çalışmaları için önerilen çözümdür.
WorkManager Nedir
WorkManager, uygulama sonlandırılsa veya cihaz yeniden başlatılsa bile çalışmanızın yürütülmesini garanti eder. Şunları sağlar:
- Çalışmaları yeniden başlatmalar arasında korur
- Başarısızlık durumunda otomatik olarak yeniden dener
- Kısıtlamaları destekler (yalnızca WiFi, yalnızca şarj sırasında vb.)
- API 14 ve sonraki sürümlerde çalışır
CoroutineWorkeraracılığıyla Kotlin Coroutines ile bütünleşir
Kurulum
WorkManager'ı app/build.gradle dosyasına ekleyin:
dependencies {
implementation 'androidx.work:work-runtime-ktx:2.9.0'
}Worker Oluşturma
CoroutineWorker sınıfını genişletin ve doWork() yöntemini uygulayın. Result.success(), Result.failure() veya Result.retry() döndürün:
class SyncWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
// This runs on a background coroutine
val repo = UserRepository(applicationContext)
repo.syncFromNetwork()
Result.success()
} catch (e: Exception) {
if (runAttemptCount < 3) Result.retry()
else Result.failure()
}
}
}OneTimeWorkRequest
Tek seferlik bir görevi zamanlayıp kuyruğa ekleyin:
val syncWork = OneTimeWorkRequestBuilder<SyncWorker>()
.setInitialDelay(10, TimeUnit.MINUTES) // optional delay
.build()
WorkManager.getInstance(context).enqueue(syncWork)
// With a unique name (prevents duplicates):
WorkManager.getInstance(context).enqueueUniqueWork(
"sync_work",
ExistingWorkPolicy.KEEP, // don't enqueue if already pending
syncWork
)PeriodicWorkRequest
Tekrarlanan görevleri zamanlayın. En kısa aralık 15 dakikadır:
val periodicSync = PeriodicWorkRequestBuilder<SyncWorker>(
repeatInterval = 1, TimeUnit.HOURS
).build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"hourly_sync",
ExistingPeriodicWorkPolicy.KEEP,
periodicSync
)Kısıtlamalar
Çalışmayı yalnızca koşullar karşılandığında yürütün — pil düşük değilken, WiFi bağlıyken vb.:
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED) // WiFi only
.setRequiresBatteryNotLow(true)
.setRequiresCharging(false)
.build()
val work = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context).enqueue(work)Girdi ve Çıktı Verileri
Bir Worker'a veri aktarmak ve Worker'dan veri almak için Data nesnelerini kullanın:
// Enqueue with input data:
val inputData = workDataOf("user_id" to 42)
val work = OneTimeWorkRequestBuilder<SyncWorker>()
.setInputData(inputData)
.build()
// Inside the Worker:
class SyncWorker(...) : CoroutineWorker(...) {
override suspend fun doWork(): Result {
val userId = inputData.getInt("user_id", -1)
// Pass output data back:
val output = workDataOf("synced_count" to 10)
return Result.success(output)
}
}Çalışma Durumunu Gözlemleme
getWorkInfoByIdLiveData kullanarak çalışma ilerlemesini gözlemleyin:
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>().build()
WorkManager.getInstance(this).enqueue(workRequest)
WorkManager.getInstance(this)
.getWorkInfoByIdLiveData(workRequest.id)
.observe(this) { info ->
when (info?.state) {
WorkInfo.State.RUNNING -> binding.tvStatus.text = "Syncing..."
WorkInfo.State.SUCCEEDED -> binding.tvStatus.text = "Done!"
WorkInfo.State.FAILED -> binding.tvStatus.text = "Failed"
else -> {}
}
}Çalışmaları Zincirleme
Görevleri çalışma zincirlerini kullanarak sırayla veya paralel olarak yürütün:
val downloadWork = OneTimeWorkRequestBuilder<DownloadWorker>().build()
val processWork = OneTimeWorkRequestBuilder<ProcessWorker>().build()
val uploadWork = OneTimeWorkRequestBuilder<UploadWorker>().build()
// Sequential: download → process → upload
WorkManager.getInstance(context)
.beginWith(downloadWork)
.then(processWork)
.then(uploadWork)
.enqueue()
// Parallel then merge:
WorkManager.getInstance(context)
.beginWith(listOf(downloadWork, processWork)) // both run in parallel
.then(uploadWork) // runs after both finish
.enqueue()WorkManager ve Alternatifleri
Hangi durumda hangisini kullanmalısınız:
- WorkManager — ertelenebilir, garanti edilen ve kısıtlamalara dayalı çalışmalar. Eşitleme, yükleme ve temizleme işlemleri için en uygunudur.
- Coroutines / ViewModel — uygulama açıkken yürütülen çalışmalar. Uygulama sonlandırıldığında durur.
- AlarmManager — belirli zamanlı alarmlar (takvim anımsatıcıları). Pil yönetimi konusunda dikkatli olunmasını gerektirir.
- Ön plan hizmeti — kullanıcının farkında olduğu uzun süreli görevler (müzik çalma, navigasyon).
Hızlı Kontrol
Bir PeriodicWorkRequest için en kısa tekrarlama aralığı nedir?
Özet: WorkManager
WorkManager, garanti edilen arka plan çalışmaları için doğru araçtır:
CoroutineWorkersınıfını genişletin vedoWork()yöntemini uygulayınResult.success(),.failure()veya.retry()döndürün- Tek seferlik çalıştırmalar için
OneTimeWorkRequest, yinelenen çalışmalar içinPeriodicWorkRequestkullanın - Yalnızca WiFi, pil koşulları vb. için
Constraintsekleyin - Verileri
workDataOf()ile aktarın - Görevleri
beginWith().then().enqueue()ile zincirleyin
Sırada: etkileyici kullanıcı arayüzleri için Material Design bileşenleri var.
Sıkça Sorulan Sorular
“WorkManager ve Arka Plan Görevleri” dersi ücretsiz mi?
Evet — “WorkManager ve Arka Plan Görevleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.
“WorkManager ve Arka Plan Görevleri” dersinde ne öğreneceğim?
WorkManager ile garantili arka plan çalışmalarını zamanlayın. OneTimeWorkRequest, PeriodicWorkRequest, kısıtlamalar, veri aktarımı ve çalışma zincirlerini kullanın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 5. dersidir.
“WorkManager ve Arka Plan Görevleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Retrofit ve REST API'leri
- Coil ile Görüntü Yükleme
- Hata Yönetimi ve Kullanıcı Deneyimi
- Anlık Bildirimler
- WorkManager ve Arka Plan Görevleri
- Play Store'da Yayınlama