0Pricing
Android Academy · Ders

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
  • CoroutineWorker aracı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:

  • CoroutineWorker sınıfını genişletin ve doWork() yöntemini uygulayın
  • Result.success(), .failure() veya .retry() döndürün
  • Tek seferlik çalıştırmalar için OneTimeWorkRequest, yinelenen çalışmalar için PeriodicWorkRequest kullanın
  • Yalnızca WiFi, pil koşulları vb. için Constraints ekleyin
  • 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

  1. Retrofit ve REST API'leri
  2. Coil ile Görüntü Yükleme
  3. Hata Yönetimi ve Kullanıcı Deneyimi
  4. Anlık Bildirimler
  5. WorkManager ve Arka Plan Görevleri
  6. Play Store'da Yayınlama
← Android Academy Sayfasına Dön