"Vatanını en çok seven, görevini en iyi yapandır."

  • Yeni üyeler Neler Yapmalı, Nasıl Başlamalı? Detaylar için tıklayın
    Rütbeler ve genel görevlendirme konuları hakkında bilgi almak için tıklayın
    Uzmanlık alanları hakkında bildirge için tıklayın
    Güncel forum kuralları için tıklayın

Android WorkManager Nedir?

1njecti0n

SM Tim Lideri
Albay
Katılım
7 Haz 2018
Mesajlar
1,163
Görev/Org:
sm_timi
WorkManager Nedir?

WorkManager, ertelenebilir ve asenkronize işlemleri programlamak için kullanılan bir API'dır. WorkManager işlemlerine uygulama kapansa ya da cihaz yeniden başlatılsa da kaldığı yerden devam eder. Çoğu Android teknolojisinde de olduğu gibi WorkManager Android Jetpack'in içerisindedir. WorkManager, bütün eski iş programlama API'larına (Firebase Job Dispatcher, Gcm Network Manager ve Job Scheduler) tercih edilebilir. WorkManager API 14'ten bu yana gelen yeni özellikler ve prosedürler ile uyumlu bir şekilde çalışabilir.

WorkManager'ın iş programlamada kullanılan yapısı şu şekildedir.

Bu resim yeniden boyutlandırıldı, tam halini görmek için tıklayınız.
Please, Giriş yap or Kayıt ol to view URLs content!


Yenilikler

İş Sınırları;

Bir iş için gereken sınırları belirlemek için kullanılır. Örnek olarak; Eğer cihazın şarjı %50'nin altında ise internetten verileri indir şeklinde. İş Sınırları bu şekilde bi işin hangi şartlar altında gerçekleşeceğini belirtmemize yarar.

İş Zincirleme;

Kompleks ve karışık işler yerine, bütün işleri birbirine zincirleyerek arkaplanda da bir akış oluşturabilirsiniz. Örnek olarak; İlk olarak internetten verileri indir, daha sonra bildirimleri kontrol et daha sonra güncel konumu al şeklinde zincirleme yapabilirsiniz. İş zincirleme yine çokça kullanılan bir özelliktir.

İş Planlama Örneği:

Kotlin


Kod:
Please, Giriş yap or Kayıt ol to view codes content!

Java


Kod:
Please, Giriş yap or Kayıt ol to view codes content!

Gördüğünüz gibi çok büyük farklılıklar bulunmamaktadır.

Esnek Yeniden Deneme Prosedürü;

Bazen planladığımız işler tamamlanamaz veya hata alır, bunun karşısında WorkManager'ın bir hata dinleyicisi vardır, sizin kodlamanıza gerek duymadan bir iş hata ile sonuçlandığında onu belli bir süre geçtikten sonra tekrar çalıştırır.

Güçlü İş Planlama Yapısı;

WorkManager, bir işin tek zamanlı mı ya da bir programa uyarak mı tekrarlanacağını belirlemenizi sağlar. WorkManager ile işlere isim atayabilir ve onları gruplandırabilir ve planlama yapabilirsiniz. Planlanmış işler lokal bir veritabanında tutulur ve WorkManager, cihazın yeniden başlatılması gibi durumlarda bu veritabanıyla ilgilenir.

Entegre Yapısı;

WorkManager RxJava ve Coroutines gibi asenkronize API'larla entegre bir yapıdadır ve kendi asenkronize API'larınızla da sorunsuz ve sıkıntısız bir şekilde çalışabilir. Ek olarak WorkManager hem çok acil hem de ertelenebilir işlerle çalışabilir. Acil işler uygulama kapansa ya da cihaz yeniden başlarsa bile devamlılığını sürdürür.

Örnek olarak;

Backend servislerine log ve veriler göndermek
Periyodik olarak app'i sunucuyla senkronize etmek.

WorkManager, uygulama kapandığında yok edilebilecek işlemler için geliştirilmemiştir. Daha çok arkaplan işlemleriyle alakalıdır.

Şimdi Kotlin için WorkManager örneği yapalım

Bu örnekte her 15 dakikada bir veritabanımızdaki sayıyı 1 arttıracağız

Öncelikle WorkManager'ı projemize dahil edelim. build.gradle -> dependencies altına bunları yapıştıralım.


Kod:
Please, Giriş yap or Kayıt ol to view codes content!

Şimdi arkaplan işlemimizi yapacak olan bir sınıf oluşturuyoruz, örneğimizde bu *******Database olacak.

ve Worker sınıfını extend ediyoruz yani şu şekilde olacak

class *******Database(val context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {}

bu şekilde yazdıktan sonra bizden implement etmemizi istediği bir fonksiyon olaca bu doWork, doWork'ün içinde olan herşey periyodik veya tek zamanlı olarak gerçekleşecek.


Kod:
Please, Giriş yap or Kayıt ol to view codes content!
yazıyoruz burada kısaca numaramızı bir arttırıyoruz, bu şekilde yapısal bir biçimde WorkManager sistemimizi kurduk şimdi MainActivity'e gelelim.

Burada sınıfın içinde context ve workerparams almamızın sebebi extend ettiğimiz worker sınıfının bunları istemesi. Ve bu data nereden geliyor diye merak etmeyin onu MainActivity'de gönderiyoruz.

Yukarıda context.getSharedPreferences("com.ego1st.kotlinwor kmanager", Context.MODE_PRIVATE) yazısında com.ego1st.kotlinworkmanager yerine kendi package name'inizi yazmalısınız. Yoksa veriler kaydolmaz.


Kod:
Please, Giriş yap or Kayıt ol to view codes content!

Diğer tarafta alınacak olan datayı DataBuilder ile koyduk, ismi key ve değeri 1 daha sonrasında build dedik.

Daha sonra yukarıda bashetmiş olduğum sınırları belirledik. Cihazın şarjda olmaması gerekiyor bu örnekte.

Daha sonra bir Periyodik İş İsteği verdik ve ******* Database dedik, daha sonra her 15 dakikada bir gerçekleşmesi gerektiğini belirttik. Constarinti ve datayı koyduk ardından build dedik.

Daha sonra işi sıraya aldık.

Daha sonra bir observer koyduk bu sayede daha önceden request1 olarak belirlediğimiz işin durumunu öğrendik ve yazdırdık. WorkManager ile ilgili paylaşabileceklerim bunlar.

Bazı Notlar;

- WorkManager'ın her zaman son sürümünü kullanmaya çalışın. Sürekli gelişen bir yapısı olduğunda size faydası olacaktır.

- WorkManager kullanırken çok dikkatlı olmak zorundasınız çünkü pek iyi bir kurtarma sistemine sahip değil, yazdığınız bütün işlemleri iki kez gözden geçirin.

- WorkManager Java'dan ziyade Kotlin ile daha iyi çalışmaktadır eğer WorkManager kullanmak istiyorsanız Kotlin sizin 1. tercihiniz olmalıdır.

- WorkManager ile Coroutines kütüphanesi %100 senkron bir şekilde çalışmaktadır, ikisini de projenizde bulundurmak size avantaj sağlar

NOT: Sansürlenmiş / gizlenmiş yerde R efresh yazıyo dostlar
 
Üst