WorkManager'ı kullanmaya başlama

WorkManager'ı kullanmaya başlamak için önce kitaplığı Android projenize aktarın.

Uygulamanızın build.gradle dosyasına aşağıdaki bağımlılıkları ekleyin:

Modern

dependencies {
    def work_version = "2.12.0"

    // (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"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.12.0"

    // (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")

    // optional - Multiprocess support
    implementation("androidx.work:work-multiprocess:$work_version")
}

Bağımlılıkları ekleyip Gradle projenizi senkronize ettikten sonraki adım, çalıştırılacak bir iş tanımlamaktır.

İşi tanımlama

İş, Worker sınıfı kullanılarak tanımlanır. doWork() yöntemi, WorkManager tarafından sağlanan bir arka plan iş parçacığında eşzamansız olarak çalışır.

WorkManager'ın çalıştıracağı bir iş oluşturmak için Worker sınıfını genişletin ve doWork() yöntemini geçersiz kılın. Örneğin, resim yükleyen bir Worker oluşturmak için aşağıdakileri yapabilirsiniz:

Kotlin

class UploadWorker(appContext: Context, workerParams: WorkerParameters):
       Worker(appContext, workerParams) {
   override fun doWork(): Result {

       // Do the work here--in this case, upload the images.
       uploadImages()

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

Java

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 work finished successfully with the Result
     return Result.success();
   }
}

doWork() tarafından döndürülen Result, WorkManager hizmetine işin başarılı olup olmadığını ve başarısızlık durumunda işin yeniden denenip denenmeyeceğini bildirir.

  • Result.success(): İş başarıyla tamamlandı.
  • Result.failure(): İş başarısız oldu.
  • Result.retry(): İş başarısız oldu ve yeniden deneme politikasına göre başka bir zaman denenmelidir.

WorkRequest oluşturma

İşiniz tanımlandıktan sonra çalıştırılabilmesi için WorkManager hizmetiyle planlanması gerekir. WorkManager, işlerinizi planlama konusunda size büyük esneklik sağlar. Belirli bir zaman aralığında periyodik olarak çalışacak şekilde veya yalnızca bir kez çalışacak şekilde planlayabilirsiniz.

Çalışmayı nasıl planlarsanız planlayın her zaman bir WorkRequest kullanırsınız. Worker, iş birimini tanımlarken WorkRequest (ve alt sınıfları) bu işin nasıl ve ne zaman çalıştırılacağını tanımlar. En basit durumda, aşağıdaki örnekte gösterildiği gibi bir OneTimeWorkRequest kullanabilirsiniz.

Kotlin

val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<UploadWorker>()
       .build()

Java

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

WorkRequest'i sisteme gönderme

Son olarak, enqueue() yöntemini kullanarak WorkRequest öğenizi WorkManager adresine göndermeniz gerekir.

Kotlin

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java

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

Çalışanın tam olarak ne zaman yürütüleceği, WorkRequest uygulamanızda kullanılan kısıtlamalara ve sistem optimizasyonlarına bağlıdır. WorkManager, bu kısıtlamalar altında en iyi davranışı sunacak şekilde tasarlanmıştır.

Sonraki adımlar

Bu başlangıç kılavuzu, konuya yalnızca yüzeysel olarak değinmektedir. WorkRequest, çalışmanın yürütülmesi gereken kısıtlamalar, çalışmaya giriş, gecikme ve çalışmayı yeniden denemek için geri çekilme politikası gibi ek bilgiler de içerebilir. Bir sonraki bölümde, İş taleplerinizi tanımlama, bu seçenekler hakkında daha ayrıntılı bilgi edinecek ve benzersiz ve yinelenen işlerin nasıl planlanacağını anlayacaksınız.

Ek kaynaklar

Başlamanıza yardımcı olacak kılavuz dokümanlarının yanı sıra çeşitli bloglar ve codelab'ler de mevcuttur.

Codelab uygulamaları

Bloglar