我正在浏览这个 Codelab: https: //developer.android.com/codelabs/android-lifecycles#6 它解释了如何在 ViewModel 中使用 SavedStateHandle 来避免进程死亡。ViewModel的构造函数如下:
private SavedStateHandle mState;
public SavedStateViewModel(SavedStateHandle savedStateHandle) {
mState = savedStateHandle;
}
Run Code Online (Sandbox Code Playgroud)
并且viewmodel在Activity中初始化如下:
mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);
Run Code Online (Sandbox Code Playgroud)
ViewModel 的构造函数何时被调用?而Viewmodel是如何获取savedStateHandleViewModel的参数的呢?
编辑:
我通过这篇博文找到了问题的答案: https://www.rockandnull.com/viewmodel-savedstate/
它表示,如果 是SavedStateHandle视图模型构造函数中的唯一参数,则by viewModels委托会自动将其提供给视图模型。
然而,如果我们有依赖注入框架(Hilt)提供的自定义参数的组合,例如:存储库,还有一些其他运行时参数,例如:选定的类别 ID 和 SavedStateHandle 来帮助我们在视图模型的构造函数中避免进程死亡- 我们如何向工厂提供所有这些参数?
请发布一个小例子以供我的理解