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

如何在Activity未因屏幕旋转重建时执行指定代码?

解决Activity旋转时重复生成问题的问题

你可以通过判断Activity是否为首次创建来控制这段代码的执行,核心是利用onCreate方法的savedInstanceState参数——当Activity因屏幕旋转重建时,这个参数不为null;首次启动时则为null。

修改后的代码示例如下:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    
    // 仅在首次创建Activity时生成并赋值问题
    if (savedInstanceState == null) {
        val questions = quizModel.generateQuestions()
        quizViewModel.questions = questions
    }

    // 后续直接从ViewModel获取问题用于UI展示即可
    val currentQuestions = quizViewModel.questions
    // ... 这里写更新UI的逻辑
}

原理说明

  • 首次启动Activity时,savedInstanceState为null,此时执行问题生成逻辑并将数据存入ViewModel。
  • 当屏幕旋转触发Activity重建时,系统会将之前的状态封装到Bundle中传递给onCreate,所以savedInstanceState不为空,这时候直接复用ViewModel里已保存的问题列表就好,完全不需要重新生成。

另外要确认你是通过ViewModelProvider正确获取的ViewModel(比如在Activity中用ViewModelProvider(this).get(QuizViewModel::class.java)),这样ViewModel的生命周期会独立于Activity的配置变更,旋转后数据也能完整保留。

内容的提问来源于stack exchange,提问作者SmallGrammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:17:39