WorkManager’ı AppStartup ve Hilt ile Özelleştirin | tarafından Divyansh Saraswat | Tem, 2022

WorkManager'ı AppStartup ve Hilt ile Özelleştirin |  tarafından Divyansh Saraswat |  Tem, 2022
fotoğrafı çeken Krishdiphong Prayoonwongkasem üzerinde Sıçramayı kaldır

Bu yazıda, hakkında öğreneceğiz WorkManager dahil olmak üzere en iyi uygulamalar performanslı bileşen başlatma ile App Startup kütüphane.

Hilt bir görüşlü Standart kodun kendisini oluşturarak ‘fabrikalar’ oluşturma görevini ortadan kaldıran DI kitaplığı.

Ancak Hilt’in avantajları vardır, örneğin bağımlılıkları ve kapsayıcılarını (Servis Bulucu, fabrikalar, vb.) kendimiz yazmak zorunda değiliz.

Bağımlılık enjeksiyonunun başparmak kuralı:

Sınıfların kendi başlarına bağımlılıklar oluşturmasına gerek yoktur, bu bağımlılıklar onlara sağlanmalıdır.

sağlama adımları WorkManager kullanarak bir bağımlılık ve isteğe bağlı başlatma olarak App Startup :

  1. uygulayan bir Hilt modülü tanımlayın. Initializer<WorkManager>
  2. geçersiz kıl create() olarak işlev @Provides yöntem
  3. Varsayılan başlatıcıyı AppManifest.kt dosya.

ViewModels, oluşturma/başlatma işleminden sorumlu olmamalıdır WorkManager örnek kendilerini.

class BlurViewModel(application: Application) : ViewModel(){private val workManager = WorkManager.getInstance(application)
...
}

sağlamak için Hilt’i kullanabiliriz. WorkManager örnek burada.

bu WorkManager örnek başlatılmalıdır Talep üzerine ve uygulama başladığında hemen değil.

Bu makale, içinde sağlanan başlangıç ​​kodunu kullanır. WorkManager kod laboratuvarı referans olarak.

Proje seviyesi build.gradle

Uygulama düzeyi build.gradle

Göre belgeler:

WorkManager’ı kullanmanız gerektiğinde, yöntemi çağırdığınızdan emin olun. WorkManager.getInstance(Context).

Bu daha önce yapılan ViewModel yukarıda belirttiğimiz kod

private val workManager = WorkManager.getInstance(context)

WorkManager, uygulamanızın özel getWorkManagerConfiguration() onu keşfetme yöntemi Configuration. (aramanıza gerek yok WorkManager.initialize() kendin.)

Bu özelliğe bir denir özel yapılandırma Hilt kullanarak uygulayacağımız. Hilt kullanmasaydık o zaman muhtemelen şöyle bir şey yazardık:

Bu görev için tek bir sağlayıcı düğümü kullandığımızı unutmayın.

Hilt Modülü kurulumu:

bir tanımlıyoruz object ve uygulamasını sağlamak Initializer<WorkManager> yöntemlerini geçersiz kılarak ve ilgili olanlara açıklama ekleyerek arayüz @Provides. WorkManager örneği bir singleton olmalıdır (uygulama kapsayıcısını kapsamalıdır) ve bu nedenle yöntem ile açıklamalı @Singleton.

Modülümüz oluşturmaktan sorumludur. WorkManager bağımlılık. bu @Provides yöntem geçersiz kılar create() yöntem ve başlatır WorkManager örneğine istenen konfigürasyonu sağlamak için.

Bu örnekte, WorkManager herhangi bir bağımlılığı yoktu, bu yüzden boş bir liste döndürdük.

ViewModel’imizde WorkManager bağımlılığını kullanma

Önceki adımlarda yaptıklarımız:

  1. Varsayılan başlatıcıyı kaldırın
  2. Uygulama başlatmayı kullanarak bir Hilt modülünün içine özel bir başlatıcı yazdı.

Tüketmek için yapıcı enjeksiyonunu kullanacağız. WorkManager örneğini sınıfın kendisinde başlatmak yerine bir bağımlılık olarak kullanın.

Hilt kullandığımızda, yapıcı parametresinin application: Application Hilt tarafından da sağlanmaktadır.

Son adım olarak, kullanacağız Hilt açıklamaları üzerinde BlurWorker Bağımlılık enjeksiyon işlemini tamamlamak ve uygulamayı çalıştırmak için sınıf.

Bu sınıf kullanır AssistedInjection

Hançer belgelerine göre:

Destekli enjeksiyon, bazı parametrelerin DI çerçevesi tarafından sağlanabileceği ve diğerlerinin kullanıcı tarafından oluşturma zamanında (diğer bir deyişle “destekli”) iletilmesi gereken bir nesne oluşturmak için kullanılan bir bağımlılık enjeksiyon (DI) modelidir.

Bir fabrika tipik olarak tüm parametreleri birleştirmek ve nesneyi oluşturmaktan sorumludur.

O fabrika en HiltWorkerFactory sahamıza enjekte ettiğimiz BlurApplication.kt sınıf.

Uygulamanın geri kalanı için doWork() değişmez.

Bu makale, WorkManager adlı bir bileşenin özel olarak başlatılmasına ilişkin bir fikir verdi. Bir mimari bileşenin örneğinin bir bağımlılık olarak nasıl sağlanabileceği hakkında bir fikir tartıştık.

Bir üretim ortamında muhtemelen daha basit bir yaklaşım kullanırdık, çünkü Worker sınıflar ve yöntemleri, bazı test araçları kullanılarak test edilebilir.

Kullanabiliriz WorkManagerTestInitHelper ile WorkManager’ı test için başlat.

  1. WorkManager Yolu
  2. Gelişmiş WorkManager kod laboratuvarı

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.