基础层面
1. 默认情况下的生命周期变化
当Activity发生横竖屏切换时,默认会经历以下生命周期回调:
onPause() -> onSaveInstanceState() -> onStop() -> onDestroy()
-> onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()
2. 为什么会有这样的生命周期变化?
-
系统默认会销毁并重建Activity,因为横竖屏切换通常需要加载不同的布局资源
-
系统会先保存当前状态(onSaveInstanceState),然后在重建后恢复状态(onRestoreInstanceState)
中级层面
1. 配置变更的应对策略
可以通过以下方式改变默认行为:
<!-- AndroidManifest.xml中配置 -->
<activity android:name=".MyActivity"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"/>
2. 手动处理配置变更
在Activity中重写:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 手动处理配置变更
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏处理
} else {
// 竖屏处理
}
}
高级层面
1. ViewModel的存活
-
ViewModel不会因为配置变更而被销毁
-
可以利用ViewModel在横竖屏切换时保持数据
2. 保留Fragment
使用setRetainInstance(true)可以让Fragment在配置变更时不被销毁
3. 正确处理资源
-
提供不同的布局资源:layout-land/和layout-port/
-
提供不同的值资源:values-land/和values-port/
专家层面
1. 性能优化考虑
-
避免在onSaveInstanceState中保存大量数据
-
考虑使用ViewModel + SavedStateHandle组合
-
对于复杂UI,考虑使用Fragment并保留实例
2. 多窗口模式下的处理
-
在Android 7.0+,需要考虑多窗口模式下的配置变更
-
可能需要处理更频繁的尺寸变化
3. 自定义配置处理
-
实现自定义的Configuration变化处理逻辑
-
结合WindowManager计算实际可用尺寸
技巧
-
渐进式回答:从基础生命周期开始,逐步深入到优化策略
-
结合实际场景:举例说明在什么情况下会选择不同处理方式
-
强调权衡:说明每种方式的优缺点,如手动处理vs自动重建
-
最新技术:提及Jetpack组件如ViewModel、SavedStateHandle的解决方案
-
性能意识:强调正确处理配置变更对用户体验的影响
通过这种渐进式的回答方式,可以全面展示对Activity生命周期的理解深度和实际应用能力。
Android Activity横竖屏切换生命周期解析
753

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



