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

AVD旋转时Android onCreate()方法未被调用的原因排查

AVD旋转时Activity的onCreate()未被调用的排查方案

未做特殊配置的Activity在屏幕方向变化时,默认会走销毁重建流程、重新调用onCreate(),不触发该回调的原因基本分为两类:系统未实际下发配置变更事件,或配置变更被Manifest属性拦截,按以下顺序排查即可:

核心原因列表

  • AVD自动旋转处于锁定状态:模拟器侧边栏的旋转按钮仅修改设备物理显示方向,如果AVD系统设置里的「自动旋转屏幕」开关关闭,应用不会收到方向变更通知,不会触发重建。
  • Manifest配置排查遗漏:
    • 不要仅检查<activity>标签上的android:configChanges属性,<application>根标签设置的全局configChanges属性会被所有子Activity继承,全局配置同样会拦截重建流程。
    • 从Android 3.2(API 13)开始,屏幕旋转触发的配置变更会同时携带screenSize标识,只要configChanges中声明了screenSize、screenLayout、smallestScreenSize中的相关项,哪怕没有显式添加orientation配置,高版本系统下也不会重建Activity,而是直接回调onConfigurationChanged()方法。
    • 如果<activity>标签配置了固定方向属性,比如android:screenOrientation="portrait"、landscape、locked,Activity方向会被强制锁定,旋转操作不会触发任何配置变更。
  • 项目模板默认配置影响:Android Studio Chipmunk 2021.2.1版本的部分Activity模板(如Game Activity)创建时会默认添加配置变更拦截属性,若创建项目时未手动清理,即使没有主动写android:configChanges="orientation",也会出现旋转不重建的现象。

定位验证方式

在MainActivity中添加以下生命周期回调日志,旋转AVD时观察Logcat输出即可快速定位问题:

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    Log.d(TAG, "onConfigurationChanged 触发,当前方向值:${newConfig.orientation}")
}

override fun onDestroy() {
    super.onDestroy()
    Log.d(TAG, "onDestroy 触发")
}

override fun onResume() {
    super.onResume()
    Log.d(TAG, "onResume 触发")
}
  • 旋转时如果只打印onConfigurationChanged日志,没有onDestroy、onCreate相关日志,说明配置变更被configChanges属性拦截,回到Manifest文件删除对应拦截配置即可恢复默认重建行为。
  • 旋转时如果没有打印任何上述新增日志,说明系统没有向应用下发配置变更事件,优先检查AVD自动旋转开关、Activity是否配置了固定方向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:06:12