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.
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 |
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
- Workmanager - MAD Becerileri, video serisi
- 2018 Android Dev Summit'ten WorkManager ile çalışma
- 2019 Android Dev Summit'ten WorkManager: Temel bilgilerden daha fazlası
Bloglar
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Uygulama Başlatma