You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:20:25