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.
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
- 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)