Android Activity 横竖屏切换的生命周期

Android Activity横竖屏切换生命周期解析

基础层面

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计算实际可用尺寸

技巧

  1. 渐进式回答:从基础生命周期开始,逐步深入到优化策略

  2. 结合实际场景:举例说明在什么情况下会选择不同处理方式

  3. 强调权衡:说明每种方式的优缺点,如手动处理vs自动重建

  4. 最新技术:提及Jetpack组件如ViewModel、SavedStateHandle的解决方案

  5. 性能意识:强调正确处理配置变更对用户体验的影响

通过这种渐进式的回答方式,可以全面展示对Activity生命周期的理解深度和实际应用能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值