👉Android WorkManager Nedir? Kullanırken Nelere Dikkat Edilmeli?
✨Herkese merhabaa, ilk medium yazımda WorkManager konusunu ele aldım. Umarım sizler için faydalı olur. İçerik kısmına bakacak olursak :
✔️ WorkManager Nedir?
✔️ Kullanılan Temel Yapılar Nelerdir?
✔️ Sunduğu Avantajlar Nelerdir?
✔️ Özellikleri Nelerdir?
✔️ Kullanırken Ne Yapılmamalı?
WorkManager Nedir?
🔹 WorkManager, arka planda yapılmasını istediğimiz ertelenebilir ya da asenkronize işlemleri; uygulama kapatılsa veya yeniden başlatılsa bile çalışmasına devam eden, bir defalık (OneTimeWorkRequest) ya da periyodik olarak (PeriodicWorkRequest) çalışabilen ve iş zincirleri oluşturabilmemize imkan sağlayan bir yapıdır.
Asenkronize işlem: Aynı anda yapılması gereken işlerin birbirlerini beklemeden yürütülmesidir.
🔹 WorkManager API önceden kullanılan :
- FireBaseJobDispatcher
- GcmNetworkManager
- JobSchedular
yerine kullanılabilcek uygun ve önerilen bir alternatiftir.
FirebaseJobDispatcher: Google tarafından işlerin planlanmasını sağlayan bir yapıdır. Google Play hizmetlerini kullanır.
GcmNetworkManager: FirebaseJobDispatcher gibi Google Play hizmetlerini kulanmaktadır. Odak noktası geliştiriciler için ağ isteklerini zamanlayarak ağ sorunlarını azaltmaya çalışmaktır.
JobSchedular: Tekrarlayan bir işlem olduğunda ya da spesifik koşullar altında yürütülen işlemleri en az maliyetle en verimli şekilde gerçekleştirilmesini sağlar.
Temel Yapılar
- Worker: Yapılan işin gerçekleştiği kısımdır. Oluşturduğumuz sınıfa (İşin arka planda hangi kısıtlamalar altında, nasıl çalışması gerektiğini yazdığımız sınıf) extends edilir.
- WorkManager: İşimizin yürütüldüğü, gerçekleştirildiği kısım.
- WorkRequest: Kısaca bizim istek yapımız.Bu istek yapısının içine; kısıtlamalar koyabiliriz, başka işlemleri dahil edebiliriz, input verebiliriz.
- WorkInfo: Oluşturduğumuz işi/işleri takip edebileceğimiz, durumlarını öğrenebileceğimiz bir yapıdır. İşlemlerin takibini kolaylaştırmak için LiveData yapısı kullanılmaktadır.
LiveData : Gözlemlenebilir bir veri sınıfıdır.
Sunduğu Avantajlar
- API 14' e kadar uyumluluk sağlamakta. Bu sayede API level’ ı düşük Android cihazlarda da kullanılabiliyor olması. Bu uyumluluklar ile birlikte farklı API level’ ları ile çalışma yeteneği bulunmakta.
- API 23 ve üstü ile JobSchedular, API 14–22 arasında ise servislerin kullanılıp kullanılmayacağına göre çalışabilme kabiliyeti değişebilmektedir.
- Pil dostudur. Pil tasarrufu sağlamaya çalışır.
- Yürütülmesi ertelenebilir.
- Telefon yeniden başlatılsa ya da kapatılsa bile çalışmaya devam eder.
❗️ ❗ ❗️ NOT : Tek bir durumda WorkManager arka planda çalışmasını durdurur. O da eğer uygulama öldürülürse o zaman WorkManager çalışmaz.
WorkManager’ ın Özellikleri
4 temel özelliği bulunmaktadır. Bunlar :
- Work Constraints
- Robust Scheduling
- Flexible Retry Policy
- Work Chaining
1. Work Constraints
Android Studio’ da Layout’ lar için kullandığımız constraint’ ler değildir. Ancak onlarla benzer işlevi gerçekleştirirler. Work Constraint’ ler uygulamalar için bazı kısıtlamalar koyar. Bu kıstlamalar şunlar olabilir :
➖ Telefon şarjdaysa,
➖ Batarya düşük değilse,
➖ Düşük depolama alanı yoksa,
➖ Cihaz Wifi’ ya bağlıysa, …
gibi kısıtlamalar koymaktadır.
2. RobustScheduling
🔹 Bu özellik ile bir işi tek seferde ya da tekrar tekrar çalışacak şekilde (örneğin 15 dakikada bir ya da 1 saatte bir gibi) uygulamamızı ayarlamamıza olanak tanır.
🔹 Yaptığımız işi etiketleyebilir, adlandırabiliriz. Böylece yaptığımız iş ya da yapacağımız işler birbirlerinden ayrı/benzersiz olacaktır.
🔹 İş gruplarını takip edebilir, istediğimiz zaman istediğimiz işi/işleri iptal edebiliriz.
🔸 En başta da belirttiğim gibi bir işi tek seferli ya da tekrar edebilen şekilde yapabilir ve bunun için kullanılan 2 yapı bulunmaktadır. Bunlar:
- OneTimeWorkRequest
- PeriodicWorkRequest
OneTimeWorkRequest : Tek seferlik işlerde ya da ertelenebilir işler için kullanılan bir yapıdır. Yani işlemimizin bir kez yürütülmesini istiyorsak bu yapıyı kullanırız. Örneğin; 15 dakika sonrası için ayarladık. 15. dakika geldiğinde işlem arka planda çalışmaya başlar, işini bitirir ve bir daha tekrar etmez.
PeriodicWorkRequest : Tekrar tekrar yapılmasını istediğimiz işler için kullanırız . (15 dakikada bir 1 saatte bir gibi)
Minimum verebileceğimiz zaman değeri 15 dakikadır. 15 dakika dışında 10 dakika ya da 5 dakika ya da 30 saniye gibi bir değer veremezsiniz. Çünkü 15 dakika default olarak atanmış bir değerdir. Peki neden? bu değer dışında başka bir değer verilmiyor? Çünkü en başta da belirttiğim üzere WorkManager pil dostudur ve pil tasarrufuna önem verir. Bundan dolayı 15 dakika sistem tarafından verilmiş bir kısıtlamadır pil tasarrufunu koruyabilmek için.
PeriodicWorkRequest’ te verdiğimiz zaman değerinde işlem hemen yapılmayabilir. Yani 1- 2 dakikalık bile olsa bir gecikme yaşanabilir. Çünkü diyelim ki arka planda yapılacak iş çok büyük. Bu durumda Android optimizasyano gidiyor. Yani daha performanslı daha verimli çalışmak için bu durum yaşanıyor.
PeriodicWorkRequest ile Work Chaining yapılmaz. OneTimeWorkRequest ile yapılabilir. PeriodicWorkRequest ile yapılamamasının nedeni işin hiç bir zaman SUCCEED durumuna geçmemesinden dolayıdır. Work Chaining yapılabiliyor olması için o işin bitip diğer işe geçilebilir durumda olması gerekmektedir.
3. Flexible Retry Policy
🔹 Bazen gerçekleştirmek istediğimiz iş başarısız olur. Worker, Result.retry() işlevini döndürdüğünde WorkManager işi geri çekilme kriterlerine göre yeniden planlayacaktır. Bu kriterler :
- BackOffDelay (Geri çekilme gecikmesi): Gerçekleştirmek istediğimiz işi yeniden denemeden önce beklememiz gereken min. süredir.
- BackOffPolicy (Geri çekilme politikası): Sonraki denemeler için BackOffDelay’ in nasıl artması gerektiğini ayarladığımız kısımdır. 2 şekilde arttırma yapabiliriz.
🔺 Linear BackOffPolicy : Doğrusal olarak arttırma yapar.
🔺 Exponential BackOffPolicy : Üssel olarak arttırma yapar.
4. Work Chaining
🔹 Birden fazla oluşturulan işleri birbirine bağlayan bir yapıdır. 3 çeşiti vardır.
- Sequential Chaining
- Parallel Chaining
- Multiple Parallel Chaining
1️⃣ Sequential Chaining : En temel ve en basit zincirleme yapısıdır. İlk iş yürütüldükten sonra diğer işin yürütüldüğü zincirleme yapısıdır.
2️⃣ Parallel Chaining : Paralel yapının içerisinde birden fazla işlerin olduğunu düşünelim. Bu işler bittikten sonra diğer işe geçme durumuna parallel chaining denmektedir.
3️⃣ Multiple Parallel Chaining : Birden çok iş zincirlerinin paralel olarak yürütülmesi işlemidir. WorkContinuation sınıfı ile birden fazla iş zincirini birleştirip paralel bir şekilde çalıştırabiliriz.
❗️ WorkManager Dikkatli Kullanılmalı ❗️
Peki neden ?
🔺 Kullanıcı uygulamaların arka planda ne yaptığını bilmez. Onlar için önemli olan uygulamanın ona ne kattığıdır. Bu yüzden kullanıcının haberi olmaz diyip de uygulamayla hiç alakası olmayan gereksiz bir işlemi arka planda çalıştırmak (örneğin her 20 dakikada bir kullanıcınınn konum bilgisini alıp veritabanına kaydetmek gibi) uygulamamızın Google Play’ den kaldırılmasına yol açabilir. O yüzden gereksiz hiç bir işi arka planda çalıştırmamalıyız.
✨ Bu bölümde temel anlamda WorkManager’ın ne olduğundan, özelliklerinden ve kullanırken nelere dikkat etmeniz gerektiği konusunda elimden geldiğince anlatmaya çalıştım. Umarım faydalı olmuştur. 😊 Bir sonraki yazıda görüşmek üzere. 👋