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

使用Voyager时配置变更引发生命周期处理问题(附Demo)

Voyager导航组件配置变更后生命周期观察者失效问题

有一个Demo项目用于验证Voyager导航、生命周期处理及配置变更相关的核心问题:当使用Voyager的Navigator包裹HomeScreen时,会出现生命周期处理异常——屏幕旋转这类配置变更操作后,HomeScreen的生命周期观察者将无法监听应用进入后台(如ON_PAUSE)等事件;但不使用Voyager直接使用GreetingView时,不会出现该问题。


测试流程

使用Voyager加载HomeScreen

  • 运行应用
  • 打开日志面板
  • 将应用切到后台再切回前台
  • 日志显示:HomeScreen与MainActivity的onPause事件均被正常捕获
  • 执行屏幕旋转操作
  • 发现HomeScreen无法再捕获ON_PAUSE事件
  • 再次将应用切到后台再切回前台
  • 日志显示:HomeScreen未捕获ON_STOP、ON_PAUSE或ON_RESUME事件

不使用Voyager(直接使用GreetingView)

  • 运行应用
  • 打开日志面板
  • 将应用切到后台再切回前台
  • 日志显示:HomeScreen与MainActivity的onPause事件均被正常捕获
  • 执行屏幕旋转操作
  • 所有生命周期事件均被正常捕获
  • 再次将应用切到后台再切回前台
  • 日志显示:HomeScreen可正常捕获ON_STOP、ON_PAUSE及ON_RESUME事件

项目中LifecycleOwner的实现代码

val lifecycleOwner = androidx.lifecycle.compose.LocalLifecycleOwner.current

DisposableEffect(lifecycleOwner) {
    val observer = LifecycleEventObserver { _, event -> 
        when (event) {
            Lifecycle.Event.ON_PAUSE -> {
                Log.d("GreetingView", "Lifecycle.Event.ON_PAUSE")
            }
            Lifecycle.Event.ON_RESUME -> {
                Log.d("GreetingView", "Lifecycle.Event.ON_RESUME")
            }
            else -> {
                Log.d("GreetingView", "Lifecycle.Event: $event")
            }
        }
    }
    lifecycleOwner.lifecycle.addObserver(observer)

    onDispose {
        lifecycleOwner.lifecycle.removeObserver(observer)
        Log.d("GreetingView", "Observer removed")
    }
}

恳请各位帮忙定位问题原因或提供可行的解决方案,非常感谢。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:22:37