已配置configChanges仍重启:Android API30设备旋转屏幕时Activity重启问题求助
解决API 30+设备旋转时Activity重启的问题
嘿,我之前在API 30设备上也碰到过一模一样的坑!你已经加了orientation|screenSize,但Android 11(API 30)之后,系统对屏幕配置变化的检测多了一项——smallestScreenSize,如果这个配置项变化时你没在configChanges里声明,Activity还是会触发重启。
第一步:更新AndroidManifest.xml配置
把你的Activity配置里的configChanges改成下面这样,补上smallestScreenSize:
<activity android:name=".ui.activities.MainActivity" android:configChanges="orientation|screenSize|smallestScreenSize" android:screenOrientation="sensor" android:windowSoftInputMode="adjustResize" />
第二步:验证配置是否生效
为了确认旋转时Activity不会重启,你可以在MainActivity里重写onConfigurationChanged方法,打个日志测试:
@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); // 这里可以处理旋转后的UI调整,比如更新布局、重置控件状态等 Log.d("MainActivity", "屏幕方向变化,Activity未重启!"); }
如果旋转设备时能看到这条日志,说明配置生效了,onCreate不会再被触发执行。
额外排查点(如果还是有问题)
要是改完配置还是重启,你可以检查这几个地方:
- 有没有在代码里手动调用
recreate()或者其他会导致Activity重启的方法? - 你的App主题是不是设置了全屏或者特殊窗口属性?有些全屏主题会干扰系统对配置变化的处理,试试切换回默认主题测试下。
- 有没有第三方库(比如UI框架、广告SDK)偷偷修改了Activity的配置?可以暂时禁用第三方库排查。
对于Android 12(API 31)及以上的设备,如果问题还存在,你可以尝试把screenLayout也加入configChanges,变成orientation|screenSize|smallestScreenSize|screenLayout,不过大部分场景下前面三个配置就足够了。
内容的提问来源于stack exchange,提问作者enjektor0
相关产品推荐
相关产品推荐

