在 Hilt 中使用 ActivityRetainedScoped 时,什么时候会销毁存储库?
When will repository be destroyed when using ActivityRetainedScoped in Hilt?
我有一个名为 MainRepository 的存储库,带有 @ActivityRetainedScoped
@ActivityRetainedScoped
class MainRepository @Inject constructor( ... ) {
fun getCurrentUser(): Flow<User?> = callbackFlow { ... }
}
这个存储库像这样注入到多个视图模型中,因为我需要使用回调流在不同的活动中使用来自 firestore 的相同实时数据
@HiltViewModel
class MainViewModel @Inject constructor(
mainRepository: MainRepository) : ViewModel() {
val user: LiveData<User?> = mainRepository.getCurrentUser().asLiveData()
}
和
@HiltViewModel
class ProgramViewModel @Inject constructor(
mainRepository: MainRepository): ViewModel() {
val user: LiveData<User?> = mainRepository.getCurrentUser().asLiveData()
}
最后,我在这样的活动中使用我的视图模型
val mainViewModel: MainViewModel by viewModels()
val currentUser by mainViewModel.user.observeAsState()
val programViewModel: ProgramViewModel by viewModels()
val currentUser by programViewModel.user.observeAsState()
我想知道我的存储库到底什么时候会被销毁,当然,如果有更好的方法,请提出来,我的 objective 是为了减少多个云 firestore 请求。我刚接触 Hilt
因此,这里将在创建 activity 时创建存储库,并在销毁 activity 时销毁存储库,因为您使用的是 @ActivityRetainedScoped
范围,那么您的存储库将仍然存在在配置更改期间,但将使用 activity 创建和销毁。以及您的存储库所属的activity。
另请参阅 hilt 官方文档的评论:
ActivityRetainedComponent lives across configuration changes, so it is
created at the first onCreate and last onDestroy.
但我想您不需要将范围界定添加到您的存储库中,因为存储库总是附加一些功能 activity 和 ViewModel 并且会自动落入功能范围。
我有一个名为 MainRepository 的存储库,带有 @ActivityRetainedScoped
@ActivityRetainedScoped
class MainRepository @Inject constructor( ... ) {
fun getCurrentUser(): Flow<User?> = callbackFlow { ... }
}
这个存储库像这样注入到多个视图模型中,因为我需要使用回调流在不同的活动中使用来自 firestore 的相同实时数据
@HiltViewModel
class MainViewModel @Inject constructor(
mainRepository: MainRepository) : ViewModel() {
val user: LiveData<User?> = mainRepository.getCurrentUser().asLiveData()
}
和
@HiltViewModel
class ProgramViewModel @Inject constructor(
mainRepository: MainRepository): ViewModel() {
val user: LiveData<User?> = mainRepository.getCurrentUser().asLiveData()
}
最后,我在这样的活动中使用我的视图模型
val mainViewModel: MainViewModel by viewModels()
val currentUser by mainViewModel.user.observeAsState()
val programViewModel: ProgramViewModel by viewModels()
val currentUser by programViewModel.user.observeAsState()
我想知道我的存储库到底什么时候会被销毁,当然,如果有更好的方法,请提出来,我的 objective 是为了减少多个云 firestore 请求。我刚接触 Hilt
因此,这里将在创建 activity 时创建存储库,并在销毁 activity 时销毁存储库,因为您使用的是 @ActivityRetainedScoped
范围,那么您的存储库将仍然存在在配置更改期间,但将使用 activity 创建和销毁。以及您的存储库所属的activity。
另请参阅 hilt 官方文档的评论:
ActivityRetainedComponent lives across configuration changes, so it is created at the first onCreate and last onDestroy.
但我想您不需要将范围界定添加到您的存储库中,因为存储库总是附加一些功能 activity 和 ViewModel 并且会自动落入功能范围。