Utilizando WorkManager com Hilt - 작업자 클래스에 종속

워크매니저



WorkManager é uma API para programação de tarefas assíncronas que nos permite programar tarefas para serem executadas mesmo quando o app é fechado.

자루



Dagger는 Dagger와 함께 Android criada com base에 있는 도서관에 대한 의존도를 높일 수 있습니다.

Nesse artigo eu vou Demonstrar como utilizar injeção de Dependências na classe WorkManager da API WorkManager com Hilt




WorkManager에 의존하는 전문가
build.gradle(Module)
dependencies {
implementation "androidx.work:work-runtime-ktx:2.5.0"
androidTestImplementation "androidx.work:work-testing:2.5.0"
testImplementation "androidx.work:work-testing:2.5.0"
}





정의된 작업은 작업자의 클래스에 따라 사용 가능합니다.



class SomeWork(appContext: Context, workerParams: WorkerParameters):
       Worker(appContext, workerParams) {
   override fun doWork(): Result {

    val user: User = User("John Doe", 32)

    print(user.toString())

       return Result.success()
   }
}



No exemplo acima a classe SomeWork que estende Worker instancia um objeto do tipo User e imprime o resultado no terminal. 아니요 seguir veremos como passar parametro com hilt를 통한 사용자의 예




Criar uma WorkRequest e envirar para o sistema



//Criando request
val doSomeWorkRequest: WorkRequest =
PeriodicWorkRequestBuilder<SomeWork>(15,TimeUnit.Minutes)
.build()

//Enviando para o sistema
WorkManager.getInstance(context)
                .enqueueUniquePeriodicWork(
                    "AppNameSomeWork",
                    ExistingPeriodicWorkPolicy.KEEP,
                    doSomeWorkRequest
                )


No exemplo acima foi criada uma requisição que irá se repetir a cada 15 minutos que é o tempo minutos que é o tempo mínimo permitido pelo sistema. A cada 15 minutos será executada a linha de codigo print(user.toString()) dentro no método doWork() na classe SomeWork



아디시오난도 힐트 노 프로제토
build.gradle(Project)
buildscript {
    //...
    dependencies {
        //...
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.37'
    }
}



build.gradle(Module)
//...
plugins {
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

android {
    //...
//O Hilt usa recursos do Java 8, ativar o Java 8
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

 defaultConfig {
    //...
annotationProcessorOptions {
//O importante aqui é substituir = por += caso seu 
//projeto não esteja assim
                arguments += [... ] 
            }
}
}

kapt {
    correctErrorTypes true
}

dependencies {
    //Dagger - Hilt
    implementation 'com.google.dagger:hilt-android:2.37'
    kapt 'com.google.dagger:hilt-compiler:2.37'
    kapt 'androidx.hilt:hilt-compiler:1.0.0'
    implementation 'androidx.hilt:hilt-work:1.0.0'
    implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03'
}


Adicione asdependências e verifique as configurações.


Anotando class do projeto que estende Application()


AppNameApplication.kt
@HiltAndroidApp
class AppNameApplication : Application() {
override fun onCreate() {
        super.onCreate()
//...
    }
}


Essas anotações는 수업에 따라 준비하고 의존할 수 있습니다.
O hilt também é compatível com as seguintes classes:
활동, 조각, 보기, 서비스 e BroadcastReceiver.
.Injetar Dependências via hilt numa classe que não é compatível demanda um trabalho a mais.. talvez um proximo artigo. Mas o nosso foco aqui é a classe Worker então vamos lá.

Criando um modulo do Hilt


AppModule.kt
@InstallIn(SingletonComponent::class)
@Module
object AppModule {

 @Singleton
 @Provides
fun provideUser(): User{
return User("John Doe", 32)
}

}


Agora podemos injetar a instancia de User. Reparem nas anotações elas são Importantes para entender os detalhes Consultem a documentação do Hilt
hilt-android

SomeWork에 대한 의존도를 받을 수 있는 클래스를 준비하십시오.



@HiltWorker
class SomeWork @AssistedInject constructor(
@Assisted appContext: Context, 
@Assisted workerParams: WorkerParameters, 
val user: User):
       Worker(appContext, workerParams) {
   override fun doWork(): Result {
    print(user.toString())
       return Result.success()
   }
}

사용자 계정을 통한 인스턴스 사용SomeWork mas ainda precisamos fazer mais algumas coisas para tudo funcionar. O sistema cria uma instancia de WorkManager com uma configuração padrão, precisamos criar uma nova configuração para tudo funcionar corretamente.

AndroidManifest.xml에 대해 WorkManager에 대한 사용자 지정 구성에 대한 정보를 제공하지 않습니다.


AndroidManifest.xml
<!--Dentro da Tag application-->
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />


Feito isso vamos criar a configuração customizada.

WorkManager의 Criando nova 구성


AppNameApplication.kt
@HiltAndroidApp
class AppNameApplication : Application() {

@Inject lateinit var workerFactory: HiltWorkerFactory

override fun getWorkManagerConfiguration(): Configuration {
        return Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
    }
}


작업을 수행할 때 즉시 사용할 수 있으며, 작업자는 작업에 의존하여 사용할 수 있습니다. Parece muito trabalho mas num projeto onde temos vários workers facilita muito o desenvolvimento, Podemos injetar nosso Repository por exemplo e ainda tem a facilidade nos testes.


중요하다

Até o momento as bibliotecas do Hilt não estavam funcionando bem com a biblioteca do kotlin versão 1.5.20 então usem á versão 1.5.10 que não gerou problemas.


참조:
  • HiltWorker
  • Hilt
  • workmanager
  • 좋은 웹페이지 즐겨찾기