← Back to list

Android Work Manager

WorkManager, Android’in Jetpack bileşenlerinden biridir ve arka planda çalışan görevleri yönetmek ve zamanlamak için kullanılır. Bu…

Dilara Kiraz · 2023-08-25 17:36 · 0 claps · 3.4 min read
#android-workmanager #kotlin #arka-plan #zamanlama
Open on Medium ↗
Wiki topics: 📱 · Mobile Development

Android Work Manager

WorkManager, Android’in Jetpack bileşenlerinden biridir ve arka planda çalışan görevleri yönetmek ve zamanlamak için kullanılır. Bu bileşen, iş parçacığı yönetimi ve pil ömrü optimizasyonu gibi karmaşık konuları ele alarak, uygulamanızın arka planda güvenilir bir şekilde çalışmasını sağlar.

Avantajları:

  • Arka Planda Çalışma: Kullanıcının uygulamanızı kapatması durumunda bile işleri planlayabilir ve çalıştırabilirsiniz.
  • Pil Dostu: WorkManager, pil ömrünü göz önünde bulundurarak en iyi performansı sağlamak üzere işleri yönetir.
  • Esnek Zamanlama: Gecikmeli veya düzenli olarak tekrarlanması gereken işleri kolayca planlayabilirsiniz.
  • Kısıtlamalara Uygunluk: İşleri cihaz durumuna (örneğin, şarjda olma) veya ağ bağlantısına göre planlayabilirsiniz.
  • Veri Paylaşımı: İşler arasında veri iletmek için yapılandırılmış bir veri paylaşım sistemi sunar.

WorkManager’ın Kullanım Nedenleri

1. Pil ve Performans Optimizasyonu:

WorkManager, Android cihazların pil ömrünü koruma konusunda etkili bir çözümdür. Çünkü cihazın pil ömrünü en iyi şekilde korumak için işleri pil durumuna ve diğer cihaz koşullarına göre optimize eder. Örneğin, işlerin sadece belirli bir ağ tipi (örneğin Wi-Fi) olduğunda veya cihaz şarjdayken çalışması gibi kısıtlamalar belirleyebilirsiniz. Bu sayede kullanıcılar uygulamanızı kullanırken pil tüketiminin minimumda kalmasını sağlayabilirsiniz.

2. Güvenilir İş Yürütme:

WorkManager, uygulamanızın çeşitli yaşam döngüsü durumlarına ve cihaz yeniden başlatmalarına dayanıklı bir şekilde işleri yürütebilir. Bu, işlerin kesintiye uğramadan ve güvenilir bir şekilde tamamlanmasını sağlar. Örneğin, kullanıcının cihazını yeniden başlattığında bile işler kaldıkları yerden devam edebilir.

3. Esnek Zamanlama ve Tekrarlama:

WorkManager, işleri gecikmeli olarak başlatmanın yanı sıra belirli aralıklarla tekrarlanacak şekilde de planlayabilir. Bu, düzenli veri senkronizasyonları gibi ihtiyaçları karşılamak için idealdir. İşleri dakika, saat veya gün cinsinden tekrarlanacak şekilde planlamak mümkündür.

4. Veri Paylaşımı ve Zincirleme İşler:

WorkManager, işler arasında veri iletişimini destekler. Önceki bir işin çıktısını alıp, bir sonraki işin girdisi olarak kullanabilirsiniz. Bu, işleri bir zincirleme yapıda sıralamak ve farklı işler arasında veri taşımanın kolayca yapılabilmesini sağlar.

5. Uyum ve Kolaylık:

WorkManager, farklı Android sürümlerinde ve cihaz türlerinde tutarlı bir şekilde çalışacak şekilde tasarlanmıştır. Bu, uygulamanızın farklı cihazlarda sorunsuz bir şekilde çalışmasını sağlar. Ayrıca WorkManager, diğer Jetpack bileşenleriyle de entegre olabilir ve bu bileşenlerle birlikte kullanıldığında geliştirme sürecini kolaylaştırır.

6. Arka Planda Önemli İşlerin Yönetimi:

Uygulamanızın arka planda önemli işleri varsa (örneğin veri senkronizasyonu, bildirim gönderme), WorkManager bu işleri daha öncelikli olarak yönetmenizi sağlar. İşlerin koşullarına ve önceliklerine göre sıralanması ve işlemesine olanak tanır.

Kullanım Örnekleri:

1. Gecikmeli İş Oluşturma:

Belirli bir süre sonra çalışması gereken bir iş oluşturabilirsiniz. Örneğin, kullanıcının uygulamayı kapatmasından ertesi gün bir hatırlatıcı gönderme işlemi:

val workRequest = OneTimeWorkRequestBuilder<ReminderWorker>() // ReminderWorker adındaki işi oluşturmak için OneTimeWorkRequestBuilder sınıfını kullanır.
    .setInitialDelay(1, TimeUnit.DAYS) // setInitialDelay fonksiyonu ile işin başlama gecikmesini ayarlıyoruz. işi 1 gün sonra başlatmak istediğimizi belirtiyoruz
    .build()
WorkManager.getInstance(context).enqueue(workRequest)

2. Tekrarlayan İş Oluşturma:

Düzenli aralıklarla tekrarlanan işler oluşturabilirsiniz. Örneğin, her saat başı verileri senkronize etme işlemi:

val workRequest = PeriodicWorkRequestBuilder<SyncWorker>(1, TimeUnit.HOURS) // SyncWorker adındaki işi tekrarlanabilir bir iş olarak oluşturmak için PeriodicWorkRequestBuilder sınıfını kullanır
// Burada işin her 1 saatte bir tekrarlanmasını belirtiyoruz
    .build()
WorkManager.getInstance(context).enqueue(workRequest)

3. Kısıtlamalara Uygun İşler:

Belirli kısıtlamalara göre işleri planlayabilirsiniz. Örneğin, yalnızca cihaz şarjdayken ve Wi-Fi bağlantısı olduğunda bir indirme işlemi:

val constraints = Constraints.Builder()
    .setRequiresCharging(true) // işin cihazın şarjda olup olmadığına bakarak çalışıp çalışmayacağını belirler. true olarak ayarlandığında, iş yalnızca cihaz şarjdayken çalışacaktır.
    .setRequiredNetworkType(NetworkType.UNMETERED) // , işin ne tür bir ağ bağlantısı gerektirdiğini belirtir. NetworkType.UNMETERED, işin yalnızca "ölçülmeyen" (genellikle Wi-Fi gibi) ağ bağlantısı olduğunda çalışacağını belirtir.
    .build()

val workRequest = OneTimeWorkRequestBuilder<DownloadWorker>() // DownloadWorker adındaki işi oluşturmak için OneTimeWorkRequestBuilder sınıfını kullanır. DownloadWorker, WorkManager tarafından yürütülecek olan işin sınıfını temsil eder.
    .setConstraints(constraints) // işin bu kısıtlamalara uygun şekilde çalışmasını sağlar.
    .build()

WorkManager.getInstance(context).enqueue(workRequest)

4. Veri Paylaşımı ve Geri Bildirim:

İşler arasında veri paylaşmak için Data sınıfını kullanabilirsiniz. Örneğin, bir işten diğerine veri aktarımı:

val inputData = Data.Builder()
    .putString("key", "value") // oluşturulan Data nesnesine "key" olarak bir anahtar ve "value" olarak bir değer ekler. Yani, işten diğerine iletilmek istenen veriyi belirtir.
    .build()
// oluşturulan veriyi kullanarak bir iş oluşturuyoruz:
val workRequest = OneTimeWorkRequestBuilder<Worker>() // Worker adındaki işi oluşturmak için OneTimeWorkRequestBuilder sınıfını kullanır.
    .setInputData(inputData) // önceki adımda oluşturulan veriyi işe ekler. Yani, işin başlatılması için gerekli veriyi belirtir.
    .build()
WorkManager.getInstance(context).enqueue(workRequest)

Örnek bir senaryo üzerinden adım adım açıklamaya çalışacağım. Diyelim ki bir medya indirme uygulaması yapıyorsunuz ve kullanıcılar belirli medya dosyalarını indirebilmeliler.

Projenize dahil etmek isterseniz build.gradle dosyasını açın ve dependencies bloğuna

dependencies {

    implementation "androidx.work:work-runtime:2.7.0" 
}

kütüphanesini dahil edin.

WorkManager ile yürütülecek işi temsil eden bir sınıf oluşturmalısınız.İş sınıfınızı oluştururken Worker sınıfını genişletmelisiniz ve doWork fonksiyonunu geçersiz kılmalısınız.

class DownloadWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        // İndirme işlemi burada gerçekleştirilir
        return Result.success()
    }
}

WorkManager ile planlamak için OneTimeWorkRequest veya PeriodicWorkRequest oluşturmalısınız. İndirme işini belirli bir zaman diliminde bir defa veya düzenli olarak tekrarlamak isteyebilirsiniz.

val workRequest = OneTimeWorkRequestBuilder<DownloadWorker>()
    .setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
    .build()

WorkManager.getInstance(context).enqueue(workRequest)

setConstraints fonksiyonu ile indirme işinin yalnızca internet bağlantısı olduğunda çalışması gerektiğini belirtiyoruz.

İşin başarılı bir şekilde tamamlandığını kontrol etmek isterseniz:

WorkManager.getInstance(context).getWorkInfoByIdLiveData(workRequest.id)
    .observe(owner, { workInfo ->
        if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
            // İndirme işlemi başarıyla tamamlandı
        }
    })

Yukarıdaki örnek, işin başarılı bir şekilde tamamlandığında geri bildirim almak için getWorkInfoByIdLiveData fonksiyonunu kullanır.

Bu adımlar, WorkManager’ı temel bir indirme senaryosunda kullanmanıza yardımcı olur. Daha fazla bilgi almak isterseniz github adresimden projeyi inceleyebilirsiniz.

Kolay gelsin:)

https://github.com/dilarakiraz/WorkManager


메타데이터
post_id
e81512f5f010
slug
android-work-manager-e81512f5f010
url
https://medium.com/@dilarakiraz/android-work-manager-e81512f5f010
canonical_url
https://medium.com/@dilarakiraz/android-work-manager-e81512f5f010
author_url
https://medium.com/@dilarakiraz
status
ok
fetched_at
2026-06-09 18:04:40