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.
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
- Workmanager - MAD Becerileri, video serisi
- 2018 Android Dev Summit'teki Working with WorkManager (WorkManager ile çalışma) oturumu
- 2019 Android Dev Summit'ten WorkManager: Beyond the basics (WorkManager: Temel Bilgilerin Ötesinde)