WorkManager ile Arka Planda Görev Planlama: Pratik Örnekler
# WorkManager ile Arka Planda Görev Planlama: Pratik Örnekler
Android'de arka plan işleri güvenilir biçimde çalıştırmak zorlu bir konudur. İşletim sistemi, pil tasarrufu için uygulamaları durdurabilir, cihaz yeniden başlayabilir veya ağ kopabilir. WorkManager, Google tarafından önerilen çözüm; sistem kaynakları gözetince görevlerinizi zamanında tamamlamasını sağlar.
WorkManager, uygulamanız kapatılsa bile arka planda çalışması gereken işleri (veri senkronizasyonu, raporlama, yedekleme) yönetir. Tek seferlik görevler ve periyodik görevler destekler. Sistem, cihazın durumuna (WiFi bağlantısı, pil seviyesi) göre en uygun zamanı seçer.
`build.gradle` dosyasına ekleyin:
dependencies {
implementation "androidx.work:work-runtime-ktx:2.8.1"
}Arkada çalışacak işi tanımlayan sınıf:
import androidx.work.Worker
import androidx.work.WorkerParameters
import android.content.Context
class DataSyncWorker(context: Context, params: WorkerParameters): Worker(context, params) {
override fun doWork(): Result {
return try {
// Veri senkronizasyonu yap
val data = fetchDataFromServer()
saveToDatabase(data)
Result.success()
} catch (e: Exception) {
Result.retry() // Başarısızsa tekrar dene
}
}
private fun fetchDataFromServer(): String {
return "Sunucudan alınan veri"
}
private fun saveToDatabase(data: String) {
// Veritabanına kaydet
}
}
Her 15 dakikada bir çalışacak görev:
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import java.util.concurrent.TimeUnit
val syncRequest = PeriodicWorkRequestBuilder<DataSyncWorker>(
15, TimeUnit.MINUTES
).build()
Reklam · TESTAdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"data_sync",
ExistingPeriodicWorkPolicy.KEEP,
syncRequest
)
Belirli bir gecikmeyle bir kez çalışacak görev:
[kod]
import androidx.work.OneTimeWorkRequestBuilder
val oneTimeRequest = OneTimeWorkRequestBuilder<DataSyncWorker>().setInitialDelay(10, TimeUnit.MINUTES).build()
WorkManager.getInstance(context).enqueueUniqueWork(
"one_time_sync",
ExistingWorkPolicy.KEEP,
oneTimeRequest
)[/cod]
Görev planlandıktan sonra WorkManager, sistem koşullarına göre uygun zamanı bekler. Cihaz çalışırken ve ağ bağlıyken görev çalışır. Başarısız olursa otomatik olarak yeniden dener.
- Minimum periyod 15 dakikadır; daha kısa süreler kullanılamaz.
- `ExistingPeriodicWorkPolicy.KEEP` ile aynı görev birden fazla kez planlanmaz.
- Ağ, pil veya cihaz durumu koşulu eklemek için `Constraints` kullanın.
- WorkManager, cihaz yeniden başlasa bile görevleri kaybetmez.
0 yorum