繁体   English   中英

Jetpack 视图模型可以在可组合函数中实例化吗?

[英]Can Jetpack viewmodel be instantiated in composable function?

Android 文档说可组合函数可以并行运行: https ://developer.android.com/jetpack/compose/mental-model#parallel

这意味着,可以在任何线程上调用任何特定的可组合函数。

那么如果我们实例化viewModel如下:

@Composable
fun FooScreen(viewModel: FooViewModel = viewModel()) {
    ...
}

这意味着,可以在任何线程(特别是后台线程)上调用viewModel() (androidx.lifecycle.viewmodel.compose.viewModel)。

接下来,如果我们深入研究 viewModel()的作用,就会发现它调用了ViewModelProvider#get ViewModelProvider#get又标有@MainThread注释。

这是否意味着我们不能在可组合函数中调用viewModel()

文档说可以是多线程的。 它们目前不是多线程的——合成总是在主线程上运行。

ViewModels 有一个现有的功能请求,专门用于支持 ViewModels的多线程创建,它说:

这对于 viewModel() 的 Lifecycle ViewModel Compose API 等情况特别有用,这将确保未来多线程组合的兼容性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM