簡體   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