如何在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
相关产品推荐
相关产品推荐

