WorkManager ile görevleri planlama   Android Jetpack'in bir parçasıdır.

Kararlı çalışma için önerilen çözüm WorkManager'dır. Uygulamaların ve sistemin yeniden başlatılması sırasında planlandığı şekilde devam eden işler kalıcı olur. Arka planda işleme işlemlerinin çoğu en iyi şekilde kararlı çalışma ile gerçekleştirildiği için arka planda işleme için birincil olarak önerilen API WorkManager'dır.

Kalıcı çalışma türleri

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

  • Hemen: Hemen başlatılması ve kısa süre içinde tamamlanması gereken görevler. Hızlandırılabilir.
  • Uzun süre çalışan: Daha uzun süre (muhtemelen 10 dakikadan uzun) çalışabilecek görevler.
  • Ertelenebilir: Daha geç bir zamanda başlayan ve düzenli olarak çalıştırılabilen planlanmış görevler.

Şekil 1'de, farklı kalıcı çalışma türlerinin birbirleriyle nasıl ilişkili olduğu özetlenmiştir.

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

Benzer şekilde, aşağıdaki tabloda çeşitli çalışma türleri özetlenmiştir.

Tür Dönemsellik Erişim
Derhal Bir kerelik OneTimeWorkRequest ve Worker.

Yüksek öncelikli iş için OneTimeWorkRequest'inizdeki setExpedited() numaralı telefonu arayın.

Uzun süreli Tek seferlik veya dönemsel Herhangi bir WorkRequest veya Worker. Bildirimi işlemek için İşçi'de setForeground() işlevini çağırın.
Ertelenebilir Tek seferlik veya dönemsel PeriodicWorkRequest ve Worker.

WorkManager'ı ayarlama hakkında daha fazla bilgi için WorkRequests'inizi tanımlama başlıklı kılavuzu inceleyin.

Özellikler

WorkManager, daha basit ve tutarlı bir API sunmanın yanı sıra birçok önemli avantaja sahiptir:

Çalışma kısıtlamaları

İş kısıtlamalarını kullanarak çalışmanızın çalıştırılması için en uygun koşulları açık bir şekilde tanımlayın. Örneğin, yalnızca cihaz sınırsız bir ağdayken, boştayken veya yeterli pil gücüne sahipken çalıştırın.

Güçlü planlama

WorkManager, esnek planlama aralıkları kullanarak çalışmaları tek seferlik veya tekrar tekrar çalıştıracak şekilde planlamanıza olanak tanır. İşler etiketlenebilir ve adlandırılabilir. Bu sayede benzersiz ve değiştirilebilir işler planlayabilir, iş gruplarını birlikte izleyebilir veya iptal edebilirsiniz.

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

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

Hızlandırılmış çalışma

Arka planda yürütülecek acil işleri planlamak için WorkManager'ı kullanabilirsiniz. Kullanıcı için önemli olan ve birkaç dakika içinde tamamlanan görevler için Hızlandırılmış çalışma'yı kullanmanız gerekir.

Esnek yeniden deneme politikası

Bazen işler yolunda gitmez. WorkManager, yapılandırılabilir bir eksponansiyel geri yükleme politikası da dahil olmak üzere esnek yeniden deneme politikaları sunar.

İş zincirleme

Karmaşık işler için, hangi parçaların sırayla ve 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 söz konusu işin giriş ve çıkış verilerini tanımlayabilirsiniz. WorkManager, işleri birbirine zincirlediğinde çıkış verilerini bir iş görevinden diğerine otomatik olarak iletir.

Yerleşik mesaj dizili birlikte çalışabilirlik

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

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

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

  • Arka uç hizmetlerine günlük veya analiz gönderme.
  • Uygulama verilerini düzenli olarak bir sunucuda senkronize etme.

WorkManager, uygulama işlemi sona erdiğinde güvenli bir şekilde sonlandırılabilen işlem içi arka plan çalışması için tasarlanmamıştır. Ayrıca, anında yürütme gerektiren tüm işler için genel bir çözüm değildir. İhtiyaçlarınıza en uygun çözümü görmek için lütfen arka planda işleme kılavuzunu inceleyin.

Diğer API'lerle ilişki

Belirli kullanım alanları için önerilen çözüm olan coroutine'leri kalıcı işler için kullanmamalısınız. İş parçacıklarının eşzamanlılık çerçevesi, WorkManager'ın ise kalıcı çalışma için bir kitaplık olduğunu unutmayın. Benzer şekilde, AlarmManager'ı yalnızca saatler veya takvimler için kullanmalısınız.

API Önerilenler WorkManager ile ilişki
Komut sıraları Kalıcı olması gerekmeyen tüm asenkron işler. Kotlin'de ana iş parçacığından çıkmanın standart yolu coroutine'lerdir. Ancak uygulama kapatıldığında bu veriler bellekten silinir. Devam eden işler için WorkManager'ı kullanın.
AlarmManager Yalnızca alarmlar. WorkManager'ın aksine AlarmManager, cihazı Doz modundan uyandırır. Bu nedenle güç ve kaynak yönetimi açısından verimli değildir. Yalnızca arka plan çalışması için değil, yalnızca hassas alarmlar veya takvim etkinlikleri gibi bildirimler için kullanın.

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

WorkManager API, FirebaseJobDispatcher, GcmNetworkManager ve Job Scheduler dahil olmak üzere önceki tüm Android arka plan planlama API'lerinin önerilen yerine geçer.

Başlarken

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

Ek kaynaklar

WorkManager hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın.

Örnekler

Videolar

Bloglar