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

升级Navigation组件至2.7.7后自动销毁Activity触发IllegalStateException

升级Navigation组件至2.7.7后Activity销毁时触发IllegalStateException异常

我们的应用具备自动登出机制,超时后会销毁托管Fragment的Activity并启动Logout Activity(重定向至登录页)。

场景对比

  • 场景1(无异常):使用navigation-fragment与navigation-ui 2.3.5版本时,在任意Fragment页面触发超时销毁Activity,均无异常问题。
  • 场景2(触发致命异常):升级至navigation-fragment、navigation-ui 2.7.7版本(曾添加navigation-compose:2.7.7,后移除)后,超时销毁Activity时触发如下异常:
FATAL EXCEPTION: main
  Process: appId.uat, PID: 2152
  java.lang.RuntimeException: Unable to destroy activity {appId.uat/*.activity.DashBoardActivity}: java.lang.IllegalStateException: no event down from INITIALIZED in component NavBackStackEntry(1dfeaea1-7bd0-413f-9495-63e344e82742) destination=Destination(appId.uat:id/fragmentWeAreOn) label=FragmentWeAreOn class=*.FragmentWeAreOn
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5613)
    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5645)
    at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:47)
    at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:180)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:205)
    at android.os.Looper.loop(Looper.java:294)
    at android.app.ActivityThread.main(ActivityThread.java:8177)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
  Caused by: java.lang.IllegalStateException: no event down from INITIALIZED in component NavBackStackEntry(1dfeaea1-7bd0-413f-9495-63e344e82742) destination=Destination(appId.uat:id/fragmentWeAreOn) label=FragmentWeAreOn class=*.FragmentWeAreOn
    at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.kt:126)
    at androidx.lifecycle.LifecycleRegistry.setCurrentState(LifecycleRegistry.kt:106)
    at androidx.navigation.NavBackStackEntry.updateState(NavBackStackEntry.kt:186)
    at androidx.navigation.NavBackStackEntry.handleLifecycleEvent(NavBackStackEntry.kt:166)
    at androidx.navigation.NavController.lifecycleObserver$lambda$2(NavController.kt:190)
    at androidx.navigation.NavController.$r8$lambda$bZL_fnLbLD5ZZthGK_6aY8AQ2pA(Unknown Source:0)
    at androidx.navigation.NavController$$ExternalSyntheticLambda0.onStateChanged(Unknown Source:2)
    at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.kt:314)
    at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.kt:266)
    at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.kt:283)
    at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.kt:136)
    at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.kt:119)
    at androidx.fragment.app.Fragment.performDestroy(Fragment.java:3372)
    at androidx.fragment.app.FragmentStateManager.destroy(FragmentStateManager.java:812)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:346)
    at androidx.fragment.app.SpecialEffectsController$FragmentStateManagerOperation.complete(SpecialEffectsController.kt:664)
    at androidx.fragment.app.SpecialEffectsController$Operation.cancel(SpecialEffectsController.kt:507)
    at androidx.fragment.app.SpecialEffectsController.forceCompleteAllOperations(SpecialEffectsController.kt:293)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3037)
    at androidx.fragment.app.FragmentManager.dispatchDestroy(FragmentManager.java:2988)
    at androidx.fragment.app.FragmentController.dispatchDestroy(FragmentController.java:346)
    at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:258)
    at androidx.appcompat.app.AppCompatActivity.onDestroy(AppCompatActivity.java:283)
    at android.app.Activity.performDestroy(Activity.java:8876)
2024-06-03 19:44:13.821 2152-2152 AndroidRuntime appId.uat E   at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1491)
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5600)
    ... 13 more
2024-06-03 19:44:18.378 2152-2152 FirebaseCrashlytics appId.uat E Cannot send reports. Timed out while fetching settings.

经测试,移除androidx.navigation:navigation-compose与androidx.lifecycle:lifecycle-runtime-compose后问题仍存在,确认是从2.3.5升级至2.7.7版本导致。且该异常仅在导航栈第2层及以后页面销毁Activity时触发,起始页无此问题。尝试过多种依赖组合均未解决,恳请有相关经验的开发者提供帮助。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:57:08