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'
}
透过使用 @HiltViewModel
添加注释, 并在 ViewModel
对象的构造函数中使用 @Inject
注释来提供一个 ViewModel
。
Kotlin
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
Java
@HiltViewModel public class ExampleViewModel extends ViewModel { private final ExampleRepository repository; private final SavedStateHandle savedStateHandle; @Inject ExampleViewModel( SavedStateHandle savedStateHandle, ExampleRepository repository) { this.savedStateHandle = savedStateHandle; this.repository = repository; } ... }
然后,带有 @AndroidEntryPoint
注释的 Activity 或 Fragment 可以使用 ViewModelProvider
或 by viewModels()
KTX 扩展照常获取 ViewModel
实例:
Kotlin
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
Java
@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
或未限定作用域的绑定。您还必须使用 @Assisted
为 Context
和 WorkerParameters
依赖项添加注释:
Kotlin
class ExampleWorker @WorkerInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Java
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() }
Java
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }