Hilt에는 다른 Jetpack 라이브러리의 클래스를 제공하기 위한 확장이 포함되어 있습니다. Hilt는 현재 다음 Jetpack 구성요소를 지원합니다.
ViewModel
WorkManager
이러한 통합을 활용하려면 Hilt 종속 항목을 추가해야 합니다. 종속 항목 추가에 관한 자세한 내용은 Hilt를 사용한 종속 항목 삽입을 참조하세요.
Hilt로 ViewModel 객체 삽입
Gradle 파일에 다음과 같은 종속 항목을 추가합니다. 라이브러리 외에도 Hilt 주석 프로세서를 기반으로 작동하는 추가 주석 프로세서를 포함해야 합니다.
app/build.gradle
...
dependencies {
...
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
// When using Kotlin.
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
// When using Java.
annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}
ViewModel
객체의 생성자에서 @ViewModelInject
주석을 사용하여 ViewModel
을 제공합니다. 또한 다음과 같이 SavedStateHandle
종속 항목에 @Assisted
로 주석을 지정해야 합니다.
Kotlin
class ExampleViewModel @ViewModelInject constructor( private val repository: ExampleRepository, @Assisted private val savedStateHandle: SavedStateHandle ) : ViewModel() { ... }
자바
public class ExampleViewModel extends ViewModel { private final ExampleRepository repository; private final SavedStateHandle savedStateHandle; @ViewModelInject ExampleViewModel( ExampleRepository repository, @Assisted SavedStateHandle savedStateHandle) { this.repository = repository; this.savedStateHandle = savedStateHandle; } ... }
그런 다음, @AndroidEntryPoint
주석이 지정된 활동 또는 프래그먼트는 ViewModelProvider
또는 by viewModels()
KTX 확장을 사용하여 평소와 같이 ViewModel
인스턴스를 가져올 수 있습니다.
Kotlin
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
자바
@AndroidEntryPoint public class ExampleActivity extends AppCompatActivity { private ExampleViewModel exampleViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class); } ... }
Hilt로 WorkManager 삽입
Gradle 파일에 다음과 같은 종속 항목을 추가합니다. 라이브러리 외에도 Hilt 주석 프로세서를 기반으로 작동하는 추가 주석 프로세서를 포함해야 합니다.
app/build.gradle
...
dependencies {
...
implementation 'androidx.hilt:hilt-work:1.0.0-alpha01'
// When using Kotlin.
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
// When using Java.
annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}
Worker
객체의 생성자에서 @WorkerInject
주석을 사용하여 Worker
를 삽입합니다. Worker
객체에는 @Singleton
또는 범위가 지정되지 않은 결합만 사용할 수 있습니다. 또한 다음과 같이 Context
및 WorkerParameters
종속 항목에 @Assisted
로 주석을 지정해야 합니다.
Kotlin
class ExampleWorker @WorkerInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
자바
public class ExampleWorker extends Worker { private final WorkerDependency workerDependency; @WorkerInject ExampleWorker( @Assisted @NonNull Context context, @Assisted @NonNull WorkerParameters params, WorkerDependency workerDependency ) { super(context, params); this.workerDependency = workerDependency; } ... }
그리고 다음과 같이 Application
클래스가 Configuration.Provider
인터페이스를 구현하도록 하고 HiltWorkFactory
인스턴스를 삽입하여 WorkManager
구성에 전달합니다.
Kotlin
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
자바
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }