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

İş, uygulama yeniden başlatıldığında ve sistem yeniden başlatıldığında planlanmış olarak kalırsa kalıcıdır. Kalıcı çalışma için önerilen çözüm WorkManager'dır. Çoğu arka plan işlemi en iyi şekilde kararlı çalışma yoluyla gerçekleştirildiğinden WorkManager, genel olarak arka plan işlemleri için de önerilen birincil API'dir.

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

WorkManager üç tür kalıcı ç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, farklı kalıcı çalışma türlerinin birbiriyle nasıl ilişkili olduğunu özetlemektedir.

Kalıcı çalışma, anlık, 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 ö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) kılavuzuna 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 acil 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

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

API Önerilen kullanım alanı WorkManager ile İlişki
Coroutines Kalıcı olması gerekmeyen tüm eşzamansız çalışmalar. Kotlin'de ana iş parçacığından ayrılmanın standart yolu eş yordamlardır. Ancak uygulama kapatıldığında bellekten kaldırılırlar. Kararlı çalışma için WorkManager'ı kullanın.
AlarmManager Yalnızca alarmlar. AlarmManager, WorkManager'ın aksine cihazı Doze modundan çıkarır. Bu nedenle, güç ve kaynak yönetimi açısından verimli değildir. Bu izni yalnızca takvim etkinlikleri gibi hassas alarmlar veya bildirimler için kullanın. 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