Kalıcı iş Android Jetpack'in bir parçasıdır.

İş, uygulama yeniden başlatma ve sistemi yeniden başlatma yoluyla programlanmış olarak kaldığında kalıcıdır. Sürekli çalışma için önerilen çözüm WorkManager'dır. Çoğu arka plan işlemi kalıcı çalışmayla sağlandığından, WorkManager aynı zamanda genel olarak arka plan işleme için önerilen birincil API'dir.

Sürekli çalışma türleri

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

  • Hemen: Hemen başlaması ve yakında tamamlanması gereken görevler. Hızlandırılabilir.
  • Uzun Süreli: Daha uzun veya 10 dakikadan uzun süreli olabilecek görevler.
  • Ertelenebilir: Daha sonra başlayan ve belirli aralıklarla çalıştırılabilen planlanmış görevler.

Şekil 1, farklı kalıcı çalışma türlerinin birbirleriyle nasıl bir ilişki içinde olduğunu özetlemektedir.

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

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

Tür Dönemsellik Erişim yöntemi
Derhal Bir kerelik OneTimeWorkRequest ve Worker. İşinizi hızlandırmak için OneTimeWorkRequest'te setExpedited() numaralı telefonu arayın.
Uzun Süreli Tek seferlik veya periyodik Herhangi bir WorkRequest veya Worker. Bildirimi işlemek için Çalışan bölümünde setForeground() adlı kişiyi ara.
Ertelenebilir Tek seferlik veya periyodik PeriodicWorkRequest ve Worker.

WorkManager kurulumuyla ilgili daha fazla bilgi için İş İsteklerinizi tanımlama kılavuzuna bakın.

WorkManager Özellikleri

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

İşle ilgili kısıtlamalar

İş kısıtlamalarını kullanarak çalışmanızın çalışması için en uygun koşulları bildirimli şekilde tanımlayın. Örneğin, yalnızca cihaz sınırsız bir ağa bağlıyken, boştayken veya yeterli pil seviyesine sahip olduğunda çalıştırın.

Güçlü planlama

WorkManager, esnek planlama dönemlerini kullanarak bir kez veya tekrar tekrar çalışacak şekilde işleri planlamanıza olanak tanır. İş etiketlenebilir ve adlandırılabilir. Bu sayede benzersiz, değiştirilebilir çalışmalar planlayabilir, çalışma gruplarını birlikte izleyebilir veya iptal edebilirsiniz.

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

Ayrıca WorkManager, güç tasarrufu özelliklerine ve Doz modu gibi en iyi uygulamalara uyar. Böylece endişelenmeniz gerekmez.

Hızlandırılmış iş

Arka planda yürütülecek şekilde anında çalışma 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ı kullanmalısınız.

Esnek yeniden deneme politikası

Bazen işler başarısız olur. WorkManager, yapılandırılabilir bir üstel geri yükleme politikası içeren esnek yeniden deneme politikaları sunar.

İş zinciri

Karmaşık ve ilgili işler için, hangi parçaların sıralı ve hangilerinin paralel çalışacağını kontrol etmenize olanak tanıyan pratik bir arayüz kullanarak bağımsız iş görevlerini birlikte zincirleyin.

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şe ilişkin giriş ve çıkış verilerini tanımlayabilirsiniz. İşleri birbirine bağlarken WorkManager, çıkış verilerini bir iş görevinden diğerine otomatik olarak iletir.

Yerleşik ileti dizisiyle birlikte çalışabilirlik

WorkManager; Coroutines ve RxJava ile sorunsuz bir şekilde entegre olur ve kendi eşzamansız API'lerinizi ekleme esnekliği sağlar.

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

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

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

WorkManager, uygulama sürecinin kaldırılması durumunda güvenli bir şekilde sonlandırılabilecek arka plan işleri için tasarlanmamıştır. Ayrıca, acil yürütülmesi gereken 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şki

Eş yordamlar belirli kullanım durumları için önerilen çözüm olsa da kalıcı işler için bunları kullanmamalısınız. Eşzamanlıların bir eşzamanlılık çerçevesi, WorkManager ise sürekli çalışmaya yönelik bir kitaplık olduğunu unutmamak gerekir. Aynı şekilde, AlarmManager'ı yalnızca saatler veya takvimler için kullanmalısınız.

API Şunlar için önerilir: WorkManager ile ilişki
Koutinler Kalıcı olması gerekmeyen eşzamansız çalışmaların tümü. Eş yordamlar, Kotlin'de ana iş parçacığını bırakmanın standart yoludur. Ancak uygulama kapatıldığında hafızada kalırlar. Kalıcı çalışma için WorkManager'ı kullanın.
Alarm Yöneticisi Yalnızca alarmlar. WorkManager'ın aksine, AlarmManager bir cihazı Doz modundan uyandırır. Bu nedenle, güç ve kaynak yönetimi açısından verimli değildir. Bu özelliği yalnızca hassas alarm veya takvim etkinlikleri gibi bildirimler için kullanın, arka planda çalışırken kullanmayın.

Kullanımdan kaldırılan API'leri değiştirin

WorkManager API, FirebaseJobDispatcher, GcmNetworkManager ve JobScheduler dahil olmak üzere önceki tüm Android arka plan planlama API'lerinin yerine kullanılması önerilir.

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 sunulmaktadır.

Videolar

Bloglar

Numuneler