Görev planlama

Uygulama görünür durumdan çıksa bile çalışmaya devam edecek görevler yürütmek istediğinizde Jetpack kitaplığı WorkManager'ı kullanmanızı öneririz. WorkManager, görevlerin uygulama yeniden başlatıldığında ve cihaz yeniden açıldığında devam etmesini sağlayan güçlü bir planlama mekanizmasına sahiptir.

Çalışma türleri

WorkManager üç tür çalışmayı yönetir:

  • Hemen: Hemen başlanması ve kısa süre içinde tamamlanması gereken görevler. Hızlandırılabilir.
  • Uzun süredir çalışan: 10 dakikadan uzun sürebilecek görevler.
  • Ertelenebilir: Daha sonra başlayan ve düzenli olarak çalıştırılabilen planlanmış görevler.

Şekil 1'de, farklı görev türlerinin birbirleriyle nasıl ilişkili olduğu özetlenmektedir.

Kalıcı çalışma, anlık, uzun süreli veya ertelenebilir olabilir.
Şekil 1: Çalışma türleri.

Benzer şekilde, aşağıdaki tabloda çeşitli iş türleri özetlenmektedir.

Tür Periyodiklik Nasıl erişilir?
Derhal Bir kerelik OneTimeWorkRequest ve Worker. Hızlı işlem için OneTimeWorkRequest'teki setExpedited() numarasını arayın.
Uzun Süreli Tek seferlik veya düzenli WorkRequest veya Worker Bildirimi işlemek için Worker'da setForeground() işlevini çağırın.
Ertelenebilir Tek seferlik veya düzenli PeriodicWorkRequest ve Worker.

WorkManager'ı ayarlama hakkında daha fazla bilgi için Defining your WorkRequests (WorkRequest'lerinizi tanımlama) rehberine bakın.

WorkManager Özellikleri

WorkManager, daha basit ve tutarlı bir API sağlamanın yanı sıra başka önemli avantajlar da sunar:

Çalışma kısıtlamaları

WorkConstraints kullanarak çalışmanızın yürütülmesi için en uygun koşulları bildirimsel olarak tanımlayın. Örneğin, yalnızca cihaz sınırsız bir ağa bağlıyken, boşta kaldığında veya yeterli pil seviyesine sahip olduğunda çalıştırın.

Güçlü planlama

WorkManager, esnek planlama aralıklarını kullanarak çalışma planlamanıza ve tek seferlik veya yinelenen çalışmalar yürütmenize olanak tanır. Çalışmalar da etiketlenebilir ve adlandırılabilir. Böylece benzersiz, değiştirilebilir çalışmalar planlayabilir ve çalışma gruplarını birlikte izleyebilir veya iptal edebilirsiniz.

Planlanmış işler, dahili olarak yönetilen bir SQLite veritabanında depolanır ve WorkManager, bu işin devam etmesini ve cihaz yeniden başlatıldığında yeniden planlanmasını sağlar.

Ayrıca WorkManager, Doze modu gibi güç tasarrufu özelliklerine ve en iyi uygulamalara uyduğundan bu konuda endişelenmenize gerek yoktur.

Hızlandırılmış iş

Arka planda yürütülmek üzere anlık işleri planlamak için WorkManager'ı kullanabilirsiniz. Kullanıcı için önemli olan ve birkaç dakika içinde tamamlanan görevlerde Hızlı çalışma'yı kullanmalısınız.

Esnek yeniden deneme politikası

Bazen işler başarısız olur. WorkManager, yapılandırılabilir eksponansiyel geri yükleme politikası da dahil olmak üzere esnek yeniden deneme politikaları sunar.

Çalışma zinciri oluşturma

Karmaşık ilgili işler için, hangi parçaların sırayla, hangilerinin paralel olarak çalışacağını kontrol etmenize olanak tanıyan sezgisel bir arayüz kullanarak bağımsız iş görevlerini birbirine bağlayın.

Kotlin

val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

Java

WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

Her iş görevi için giriş ve çıkış verilerini tanımlayabilirsiniz. WorkManager, işleri zincirlerken bir iş görevinden elde edilen çıkış verilerini otomatik olarak bir sonraki iş görevine iletir.

Yerleşik mesaj dizisi birlikte çalışabilirliği

WorkManager, Coroutines ve RxJava ile sorunsuz bir şekilde entegre olur ve kendi asenkron API'lerinizi bağlama esnekliği sunar.

Güvenilir çalışma için WorkManager'ı kullanma

WorkManager, kullanıcının ekrandan ayrılması, uygulamanın çıkması veya cihazın yeniden başlatılması durumunda bile güvenilir bir şekilde çalışması gereken işler için tasarlanmıştır. Örneğin:

  • Günlükleri veya analizleri arka uç hizmetlerine gönderme
  • Uygulama verilerini düzenli olarak bir sunucuyla senkronize etme

WorkManager, uygulama işlemi ortadan kalkarsa güvenli bir şekilde sonlandırılabilen işlem içi arka plan çalışmaları için tasarlanmamıştır. Ayrıca, acil yürütme gerektiren tüm işler için genel bir çözüm değildir. Hangi çözümün ihtiyaçlarınızı karşıladığını görmek için lütfen arka plan işleme kılavuzunu inceleyin.

Diğer API'lerle ilişkisi

Bu tabloda, WorkManager'ın benzer API'lerle ilişkisi gösterilmektedir. Bu bilgiler, uygulamanızın gereksinimleri için doğru API'yi seçmenize yardımcı olabilir.

API Önerilen kullanım alanı WorkManager ile İlişki
Coroutines Uygulama görünür durumdan çıktığında kalıcı olması gerekmeyen tüm eşzamansız işlemler. Kotlin'de ana iş parçacığından ayrılmanın standart yolu eş yordamlardır. Ancak uygulama kapatılır kapatılmaz dururlar. Uygulama kapandıktan sonra bile devam etmesi gereken işler için WorkManager'ı kullanın.
AlarmManager Yalnızca alarmlar. WorkManager'ın normal çalışanlarının aksine, AlarmManager'ın tam alarmları cihazı uyku modundan çıkarır. Bu nedenle, güç ve kaynak yönetimi açısından verimli değildir. Yalnızca takvim etkinlikleri gibi kesin alarmlar veya bildirimler için kullanın, yinelenen arka plan işlemleri için kullanmayın.

Desteği sonlandırılan API'leri değiştirme

WorkManager API, FirebaseJobDispatcher ve GcmNetworkManager dahil olmak üzere önceki Android arka plan planlama API'lerinin yerine kullanılması önerilen API'dir.

Başlayın

Uygulamanızda WorkManager'ı kullanmaya başlamak için Başlangıç kılavuzuna göz atın.

Ek kaynaklar

Aşağıdaki bölümlerde bazı ek kaynaklar verilmiştir.

Videolar

Bloglar

Örnekler