Android WorkManager Kimdir, Neyin Nesidir?

Pelşin KAPLAN
Finagotech
Published in
3 min readApr 27, 2022

Herkese merhaba! Düzenli bir şekilde kitap okumak herkesin hayalidir. Bunun için kendimize istediğimiz aralıklarla bize kitap okumayı hatırlatan bir Android uygulaması yazmaya ne dersiniz?

Öncelikle bu uygulamayı yapmak için kullanacağımız WorkManager kütüphanesi neymiş öğrenelim.

  • Uygulamanız içerisinde bazı işlemleri zamanlamak istiyorsanız,
  • Belirli şartlar sağlandığında bu işlemin gerçekleşmesini istiyorsanız,
  • Bu işlemlerin belirli zaman aralıklarında çalışmasını istiyorsanız,
  • Uygulama veya cihaz yeniden başlatıldığında, zamanlanmış görevlerinizin devam etmesini istiyorsanız bu JetPack kütüphanesi tam size göre.

Uygulamanız API 14 ve üstünü destekliyorsa kullanabileceğiniz bu kütüphaneyi nasıl özelleştirebiliriz, ne gibi yerlerde kullanabiliriz bir de ona bakalım.

  • Mevcut bir ağ bağlantısı var mı,
  • Görev başlatılmadan delay verilmeli mi,
  • Giriş çıkışlar handle edilmeli mi gibi sorularda WorkManager’ı özelleştirip kullanabiliriz.

Tüm bunların yanında WorkManager pil dostu bir yapıdır. Tek seferlik çalışmalar için OneTimeWorkRequest, periyodik çalışmalar için ise PeriodicWorkRequest yapısı kullanılır.

Bir de yapılara ve işlevlerine bakalım hemen.

Worker : Arka planda gerçekleşecek görevin tanımlandığı class. Worker classını extend eder ve doWork() metodunu override ederek çalışır.

WorkRequest : Worker üzerinde belirtilen görevin ne zaman ve nasıl çalışacağını yapılandırmak için kullanılan yapıdır. Şartları özelleştirmek için Constraints yapısı kullanılabilir.

WorkManager : WorkRequest’i planlayan ve çalıştıran class’tır.

Şimdi gelelim biraz kitap okuma hatırlatıcı uygulamamıza… Bu projede kullanıcının tercihine göre belirlenen saat aralıklarıyla bildirim gönderme işlemi yapacağız. Saat aralıklarına göre hatırlatıcı kurma olayını WorkManager’ın PeriodicWorkRequest yapısı ile kuracağız. Ayrıca kullanıcıya bildirim gönderebilmek için Notification yapısını da kullanacağız.

Hopp! Haydi Başlayalım.

Şöyle basit bir UI ekleyelim önce, üç buton bir textView ve bir de gözümüze yakışıklı gelsin diye ufak bir imageView. Siz istediğiniz gibi düzenleyin tabi :)

Uygulamamızın UI tasarımı

Bu sayfadaki viewlara ulaşabilmek için uygulamama viewBinding ekliyorum. Bu bağlantıyı kurmak için kullanılan teknik konusunda tamamen özgürsünüz, dilediğinizce…

Yukarı ok şeklinde olan butona basınca sayımız artacak, aşağı ok şeklinde olan butona basılınca ise sayımız azalacak şekilde bir yapı kuruyorum, min sayı 1 olacak şekilde tabi ki. Tamam butonunun click eventine de WorkManager’ı bağlayacağım.

Şimdi geldik fasülyenin faydalarına…

Her şeyden önce gradle dosyamıza dependencymizi ekliyoruz.

implementation "androidx.work:work-runtime-ktx:2.7.1"

Öncelikle bir worker classı oluşturmamız gerekiyor ki Worker classını extend edip, gerçekleşecek olan görevimizi belirtebilelim. BookWorker classımızı oluşturup Worker’ı da extend ettikten sonra doWork metodunu override etmemiz gerekiyor. Biz şimdilik success olduğunu belirttik ama birazdan burada bildirim yollama olayını buraya ekleyeceğiz.

Hadi burası okey, peki bu Worker classını nerde nasıl kullanacağız?

MainActivity’e grei dönüyoruz ve Tamam butonuna basıldığında o anki hour bilgisini alacağız. Ardından requestimizi tanımlayacağız. Tanımlayacağız demesi kolay tabi, hadi bakalım.

  • Periyodik bir çalışma sunacağımız için PeriodicWorkRequestBuilder kullanacağız.
  • Saatlik bir değişim planladığımız için bunu requestimizde belirteceğiz.
  • Oluşturduğumuz Worker(BookWorker) classını da dahil ederek requestimizi oluşturacağız.

Burada da her şey tamam, şimdi artık bildirim gönderebiliriz. BookWorker classına geri gidip Notification tanımlaması yapalım. Öncelikle NotificationManager yapısını kullanarak bir manager oluşturalım.

  • Bildirimin yayınlanacağı kanalı belirlememiz gerekiyor ve bunun için NotificationChannel yapısını kullanıyoruz. Ardından bunu NotificationManager ile gösteriyoruz.
  • Sonrasında da oluşturacağımız bildirimin özelliklerini belirtip, bildirimi build edebiliriz. Artık bildirimimiz pişti, yenmeye hazır.
  • Ayrıca intent yapısını kullanarak, bildirime tıklandığında hangi sayfanın açılacağını belirtebiliriz. Tek sayfamız olduğu için bunu seçmesi çok da zor olmasa gerek :)

Sonuç olarak aşağıdaki notificationu elde ettik.

BookReminder Notification

Bir de uygulamamızın çalışma gifine bakalım.

BookReminder Çalışma Gifi

Kısa bir özet geçelim ve akışı inceleyelim. Periyodik düzende kullanıcının tercih etmiş olduğu saat aralığı bittikten sonra BookWorker classımızdaki doWork() metodu çalışacak ve BookWorker classı içerisinde tanımlamış olduğumuz bildirim çalışacaktır.

Projenin kaynak kodlarına linkten erişebilirsiniz :)

--

--