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

手机旋转时,正在执行的Activity会因屏幕朝向变化重新创建吗?

手机旋转时Activity是否会重建?

Hey there! 这个问题是Android开发里的经典场景了,我来给你掰扯清楚:

默认行为:会重建

默认情况下,当你旋转手机改变屏幕朝向时,系统会销毁当前的Activity实例,然后重新创建一个适配新屏幕配置的实例。

这是因为屏幕朝向变化属于「配置变更(Configuration Change)」的一种——系统认为屏幕尺寸、方向变了,需要重新加载适配新配置的布局和资源,所以会走完整的销毁重建流程:

  • 销毁阶段:onPause() → onStop() → onDestroy()
  • 重建阶段:onCreate() → onStart() → onResume()

不过系统会帮你临时保存Activity的状态:在销毁前会调用onSaveInstanceState(Bundle outState),你可以在这里存一些轻量的状态数据(比如输入框内容、列表滚动位置);重建时,这些数据会通过onCreate(Bundle savedInstanceState)或者onRestoreInstanceState(Bundle savedInstanceState)传递回来,方便你恢复状态。

如何避免Activity重建?

如果你不想让旋转触发重建,有两种常用方案:

1. 声明处理配置变更

在AndroidManifest.xml里给目标Activity添加configChanges属性,告诉系统「这个配置变更我自己处理,别重建Activity」:

<activity
    android:name=".YourActivity"
    android:configChanges="orientation|screenSize|smallestScreenSize">
</activity>

添加后,旋转时系统不会重建Activity,而是调用onConfigurationChanged(Configuration newConfig)方法,你可以在这个方法里手动调整布局、资源适配新方向。

注意:这个方法适合简单的适配场景,如果你的布局和资源依赖复杂,手动处理容易出问题,慎用。

2. 使用ViewModel保存数据

如果你只是担心重建后数据丢失,推荐用Android Architecture Components里的ViewModel——它的生命周期独立于Activity的重建,Activity销毁重建后,ViewModel会保留原来的实例,你可以直接从中获取之前保存的数据:

class MyViewModel : ViewModel() {
    val userData = MutableLiveData<User>()
}

// 在Activity中获取ViewModel
val viewModel = ViewModelProvider(this)[MyViewModel::class.java]

这样即使Activity重建,viewModel里的userData也不会丢失,完美解决数据保存的问题,这也是Google推荐的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:38:32