Utilizando WorkManager com Hilt - 작업자 클래스에 종속
16515 단어 androidworkmanagerhiltkotlin
워크매니저
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.
참조:
Reference
이 문제에 관하여(Utilizando WorkManager com Hilt - 작업자 클래스에 종속), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hillanvieira/utilizando-workmanager-com-hilt-injecao-de-dependencia-na-classe-worker-3fc7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)