MVVM技术问题:屏幕旋转时如何避免ViewModel被重建?
解决Koin获取ViewModel在屏幕旋转时重建的问题
问题出在你获取ViewModel的方式上——直接调用get(FlowViewModel.class)是获取普通依赖实例,没有关联Activity的生命周期,所以屏幕旋转导致Activity重建时,会重新创建ViewModel实例。
正确的获取方式
在Java Activity中,需要使用Koin提供的getViewModel()方法来获取与生命周期绑定的ViewModel实例,修改后的Activity代码如下:
private FlowViewModel viewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 其他初始化逻辑... viewModel = getViewModel(FlowViewModel.class); }
为什么这样能解决问题?
你在Koin模块中用viewModel { FlowViewModel(get()) }的定义是正确的,这个DSL会标记该类为生命周期感知的ViewModel。而getViewModel()方法会负责将ViewModel与Activity的生命周期绑定,在屏幕旋转等配置变更场景下,自动复用已存在的ViewModel实例,而不是重新创建。
额外注意
不要通过在Manifest中给Activity添加android:configChanges="orientation|screenSize"来绕过配置变更,这种方式会破坏Android的生命周期机制,不是推荐的解决方案。
内容的提问来源于stack exchange,提问作者Konstantin Konopko
相关产品推荐
相关产品推荐

