Android’de Arka Plan Görevleri İçin WorkManager Kullanımı | Kotlin
Giriş
Merhaba herkese! Android’in piyasaya sürülmesinden bu yana, farklı türde arka plan işlemleri için AsyncTsk, JobScheduler gibi birçok yol denedik. Ancak, Android geliştirme ekibi Marshmallow ve Oreo sürümleriyle birlikte pil optimizasyonu ve arka plan görevlerine kısıtlamalar getirdi.
Bu nedenle, geliştiricilerin arka plan görevleri için en iyi yaklaşımı seçmesi gerekiyor. İşte bu noktada, WorkManager devreye giriyor ve Firebase Job Dispatcher, Alarm Manager + Broadcast Receivers, Job Scheduler gibi bir dizi araçla uğraşma ihtiyacını ortadan kaldırarak, arka plandaki görevleri yönetmeyi kolaylaştırıyor.
WorkManager Nedir?
WorkManager, Android Jetpack kütüphanesinin bir parçasıdır ve arka plan görevlerini planlamak ve yönetmek için birleşik bir API sağlar. Cihazın durumu, pil durumu, ağ koşulları gibi faktörlere dayalı olarak görevleri akıllıca yönetir. WorkManager, uygulama veya cihaz yeniden başlatılsa bile görevlerin yürütülmesini garanti eder. Hem tek seferlik hem de periyodik görevleri destekler ve kısıtlamaların ve bağımlılıkların tanımlanmasına imkan verir.
Temel Özellikleri
- Tek Seferlik ve Periyodik Görevler: WorkManager, hem tek seferlik hem de periyodik arka plan görevlerini destekler. Bu sayede uygulama içinde çeşitli senaryolarda kullanılabilir.
- Güvence Altında Yürütme: Görevlerin uygulama veya cihaz yeniden başlatılsa bile tamamlanmasını garanti altına alır. Bu özellik, kullanıcı deneyimini iyileştirmek için önemlidir.
- Ağa Bağlılık ve Şarj Durumu Kontrolü: WorkManager, görevlerin ağ durumuna ve cihazın şarj durumuna bağlı olarak yürütülüp yürütülmeyeceğini kontrol etmek için kısıtlamalar sağlar.
- Geriye Dönük Uyumluluk: Android 4.0 (API seviye 14) ve üstü sürümlerde kullanılabilir, bu da geniş bir cihaz kitlesine hitap eder.
- İş Zamanlaması: WorkManager, belirli bir tarihe veya belirli bir süre aralığına göre görevleri planlamak için esnek bir yapı sunar.
Neden WorkManager Kullanmalıyız?
- Kolay Kullanım: WorkManager, arka plandaki görevleri yönetmeyi kolaylaştırır ve geliştiricilere daha temiz ve düzenli bir API sağlar.
- Gelişmiş Pil Optimizasyonu: Android’in güncel sürümlerinde pil optimizasyonu giderek önem kazanmıştır. WorkManager, pil dostu bir şekilde görevleri planlar ve yönetir.
- Doğru Zamanlamalar: WorkManager, cihazın şarj durumu ve ağ durumu gibi faktörlere duyarlı bir şekilde görevleri planlar, bu da uygulamanın performansını ve pil ömrünü artırır.
- Geriye Dönük Uyumluluk: WorkManager, Android sürümlerinin geniş bir yelpazesini destekler, bu da mevcut ve yeni cihazlarda sorunsuz çalışma sağlar.
WorkManager’ı Kullanımı
WorkManager kullanarak arka plan görevi oluşturmak için, ‘Worker’ sınıfının bir alt sınıfını oluşturmalı ve ‘doWork()’ yöntemini uygulamalısınız. Bu yöntem, arka planda gerçekleştirilecek işi içermelidir.
class MyWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
override fun doWork(): Result { // Arka plandaki işlemler burada gerçekleştirilir
// İşlemler
return Result.success()
}
}
‘doWork()’ yönteminde ağ istekleri, veritabanı işlemleri veya dosya işlemleri gibi arka plandaki görevleri gerçekleştirebilirsiniz. ‘Result’ değeri, görevin yürütme durumunu belirtir.
Tek Seferlik Görev Planlama
WorkManager ile tek seferlik bir arka plan görevi planlamak için ‘OneTimeWorkRequest’ sınıfını kullanabilirsiniz. Basit bir örnek:
val workRequest = OneTimeWorkRequestBuilder<MyWorker>().build()
WorkManager.getInstance(context).enqueue(workRequest)
Yukarıdaki kodda, ‘OneTimeWorkRequestBuilder’ kullanarak MyWorker sınıfını belirterek bir iş isteği oluşturuyoruz ve ardından ‘enqueue()’ yöntemini kullanarak iş isteğini sıraya alıyoruz.
Periyodik Görev Planlama
WorkManager, periyodik görevleri planlamak için ‘PeriodicWorkRequest’ sınıfını destekler. Belirli aralıklarla yürütülmesi gereken bir arka plan görevini tanımlamak için şu örneği kullanabilirsiniz:
val workRequest = PeriodicWorkRequestBuilder<MyWorker>(1, TimeUnit.DAYS).build()
WorkManager.getInstance(context).enqueue(workRequest)
Yukarıdaki kodda, MyWorker sınıfını ve aralık süresini (bu durumda 1 gün) belirterek bir 'PeriodicWorkRequestBuilder' oluşturuyoruz. Daha sonra 'enqueue()' yöntemini kullanarak iş isteğini sıraya alıyoruz.
Kısıtlamalar ve Bağımlılıklar
WorkManager, arka plan görevleriniz için kısıtlamaları ve bağımlılıkları belirlemenize olanak tanır. Ağ kullanılabilirliği, şarj durumu gibi koşulları belirten kısıtlamaları ve görevler arasındaki ilişkileri belirleyen bağımlılıkları ekleyebilirsiniz.
Aşağıdaki örnekte, bir göreve kısıtlamaları ve bağımlılıkları nasıl ekleyeceğinizi görebilirsiniz:
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresCharging(true)
.build()
val workRequest = OneTimeWorkRequestBuilder<MyWorker>()
.setConstraints(constraints)
.addTag("myTask")
.build()
val otherWorkRequest = OneTimeWorkRequestBuilder<OtherWorker>()
.addTag("otherTask")
.build()
WorkManager.getInstance(context)
.beginWith(workRequest)
.then(otherWorkRequest)
.enqueue()
Yukarıdaki kodda, ‘Constraints’ nesnesi oluşturarak ağ türünü ve şarj durumu gereksinimlerini belirtiyoruz. Daha sonra, ‘OneTimeWorkRequestBuilder’ kullanarak iş isteğini oluştururken ‘setConstraints(constraints)’ yöntemini kullanarak kısıtlamaları belirliyoruz. Ayrıca, iş isteklerine etiketler ekleyebilir ve görevler arasındaki bağımlılıkları belirlemek için ‘beginWith()’ ve ‘then()’ kullanabilirsiniz.
Sonuç
WorkManager, Android Jetpack tarafından sunulan ve Android uygulamalarındaki arka plan görevlerini yönetmeyi kolaylaştıran güçlü bir araçtır. Önceki yaklaşımların sınırlamalarını aşmak ve geliştiricilere sorunsuz bir kullanıcı deneyimi sunmak için tasarlanmıştır. WorkManager, birleşik bir API, akıllı görev yürütme ve kısıtlamalar ile bağımlılıklar için destek sağlayarak, geliştiricilerin arka plan görevlerini etkili bir şekilde yönetmelerine yardımcı olur.
Bu makalede, WorkManager’ın temellerini anlattık, neden gerekli olduğunu inceledik, tek seferlik ve periyodik görevlerin nasıl planlanacağını, kısıtlamalar ve bağımlılıkların nasıl ekleneceğini gösterdik. WorkManager, duyarlı ve verimli Android uygulamaları geliştirmek isteyen geliştiriciler için önemli bir araçtır.