Android WorkManager Kullanımı

Standard

Merhabalar,

Bir süredir aklımda zamanlamaya dair basit bir uygulama fikri vardı. Hepimizin önem verdiği, iple çektiği günler şüphesiz olmuştur. Bunun gibi işler için bir uygulama yazmak istediğiniz, arkada sürekli çalışması ve zamana dikkat etmesi gereken bir sisteme ihtiyacınız olmakta. İşte tam bu noktada WorkManager devreye girip, imdadımıza yetişiyor…

WorkManager Nedir?

Tam bir tanım yapmak gerekirse, uygulamanız içerisinde zamanlanması ya da belirli şartların sağlanması sonucu çalışacak veya belirli periyotlarla çalıştırılması gereken işlemler için kullanılan yapıdır.

Workmanager aynı zamanda uygulamanızın cihaz yeniden başlatıldığında zamanlanmış görevlerini devam ettirebilmesi gibi güzel bir özelliği daha bünyesinde barındırmakta.

Uygulamaya Entegrasyonu

Aplikasyonunuzun build.gradle dosyasına(an itibariyle dökümantas içerisindeki güncel sürümü yazdım, lütfen ileride entegre edeceğinizde şu belgeyi kontrol ediniz) kod bloğunu ekliyoruz:

dependencies {
  def work_version = "2.3.4"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"
  }

Üstteki kodlardan opsiyonel olanlar, uygulamanızın içeriğine göre eklenmeyebilir.

Şimdi de örnek bir iş parçası oluşturarak test edelim:

public class UploadWorker extends Worker {

    public UploadWorker(
        @NonNull Context context,
        @NonNull WorkerParameters params) {
        super(context, params);
    }

    @Override
    public Result doWork() {
      // Do the work here--in this case, upload the images.

      uploadImages()

      // Indicate whether the task finished successfully with the Result
      return Result.success()
    }
}

Eğer çalıştıracağınız kod parçası bir kereye mahsus olmak üzere çalıştıracaksa bu şekilde oluşturabilirsiniz:

OneTimeWorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class)
        .build()

Ya da uygulamanız birden fazla kere olmak üzere periyodik olarak çalışması gerekiyorsa da bu şekilde oluşturabilirsiniz:

PeriodicWorkRequest uploadWorkRequest = new PeriodicWorkRequest.Builder(UploadWorker.class)
        .build()

Periyodik olarak oluşturduğunuz iş parçalarında, periyot aralıkları varsayılan olarak 15 dakikadır. Bu nedenle Workmanager üzerinde 2 opsiyon bulunmaktadır. (detaylar için göz atabilirsiniz)

İş parçasını oluşturduktan sonra sistemdeki işlem kuyruğuna dahil etmek için:

WorkManager.getInstance(myContext).enqueue(uploadWorkRequest);

diyerek işleminizi başlatmış olursunuz.

İşleminizi durdurmak istediğiniz zaman ise:

WorkManager.cancelWorkById(uploadWorkRequest.getId());

diyerek durdurabilirsiniz. (detaylar için göz atabilirsiniz)

Ileri Seviye WorkManager Kullanımı

Uygulamanızdaki ilgili kod parçasının sadece cihaz şarj olurken çalışması, düşük batarya gücü durumu dışında çalışması, sadece Wi-fi etkinken çalışması gibi ileri opsiyonel özelliklere dair merak ettiklerinize şu makale üzerinden göz atabilirsiniz.

Eğer uygulamanız hali hazırda FirebaseJobDispatcher kullanıyorsa, WorkManager’a geçirmek için şu belgeleri takip ederek nasıl dönüştürebileceğinize bakabilirsiniz.

Veya uygulamanız hali hazırda GCMNetworkManager kullanıyorsa da, WorkManager’a göç etmek için bu belgere göz atabilirsiniz.

Merak ettikleriniz bu başlık altından sorabilirsiniz, bir sonraki yazımda görüşmek üzere 🙂

Kaynaklar:

https://medium.com/@aleesha/the-amazing-workmanager-in-android-ba046b69295
https://www.mobiler.dev/post/android-de-workmanager-a-gecis
https://developer.android.com/topic/libraries/architecture/workmanager/basics
https://medium.com/ekmob-developer-studio/android-workmanager-nedir-a4ba9c1dce5

Print Friendly, PDF & Email

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir