1. 理解横竖屏切换的核心问题
Android开发中最让人头疼的问题之一就是横竖屏切换导致的Activity重建。想象一下这样的场景:用户正在你的应用中填写表单,突然旋转手机,结果刚刚输入的内容全部消失了!这种糟糕的体验往往会让用户直接卸载应用。
其实问题的根源在于Android系统的默认行为:当屏幕方向改变时,系统会销毁当前Activity并重新创建一个。这个过程会触发完整的生命周期回调:onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume。如果你的应用没有正确处理状态保存和恢复,用户数据就会丢失。
我在实际项目中就踩过这个坑。当时我们的应用有一个复杂的数据录入界面,用户抱怨说旋转手机后数据就没了。经过排查,发现就是因为没有正确处理横竖屏切换。后来我们采用了configChanges属性结合布局适配的方案,完美解决了这个问题。
2. 使用configChanges避免Activity重建
2.1 基本配置方法
要避免横竖屏切换时的Activity重建,最简单的方法就是在AndroidManifest.xml中配置configChanges属性。这个属性告诉系统:"这个配置变化由我自己处理,你不用重启我的Activity"。
正确的配置应该是这样的:
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="unspecified" />
这里有个重要的细节:必须同时配置orientation、screenSize和keyboardHidden。很多老教程只写前两个,但在Android 3.2(API 13)之后,screenSize也必须加上,否则在某些设备上仍然会触发重建。
我刚开始用的时候也犯过这个错误,只配了orientation和keyboardHidden,结果测试的时候发现还是会被重建。后来查文档才知道需要加上screenSize。
2.2 处理配置变化回调
配置了configChanges之后,我们还需要重写onConfigurationChanged方法来处理配置变化:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏处理逻辑
Log.d("Orientation", "切换到横屏");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
// 竖屏处理逻辑
Log.d("Orientation", "切换到竖屏");
}
}
1970



被折叠的 条评论
为什么被折叠?



