【问题标题】:Navigation causes crash after opening killed activity打开杀死的活动后导航导致崩溃
【发布时间】:2020-07-20 21:47:41
【问题描述】:

我的应用程序在重新启动使用多个返回堆栈的已终止活动后崩溃,如底部导航选项卡的samples 所示。只有在使用多栈时才会崩溃。

堆栈跟踪:

 Caused by: java.lang.IllegalArgumentException
    at androidx.lifecycle.LifecycleRegistry.downEvent(LifecycleRegistry.java:263)
    at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:314)
    at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:334)
    at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:145)
    at androidx.lifecycle.LifecycleRegistry.setCurrentState(LifecycleRegistry.java:118)
    at androidx.navigation.NavBackStackEntry.updateState(NavBackStackEntry.java:150)
    at androidx.navigation.NavBackStackEntry.setMaxLifecycle(NavBackStackEntry.java:130)
    at androidx.navigation.NavController.popBackStackInternal(NavController.java:325)
    at androidx.navigation.NavController.dispatchOnDestinationChanged(NavController.java:426)
    at androidx.navigation.NavController.onGraphCreated(NavController.java:636)
    at androidx.navigation.NavController.setGraph(NavController.java:586)
    at androidx.navigation.NavController.setGraph(NavController.java:551)
    at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:247)
    at androidx.fragment.app.Fragment.performCreate(Fragment.java:2867)
    at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:444)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1287)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1444)
    at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1522)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1575)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3001)
    at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2938)
    at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:240)
    at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:243)
    at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:118)
    at my.base.ui.base.DaggerActivity.onCreate(DaggerActivity.kt:26)
    at my.base.ui.base.delegate.LocalizationActivity.onCreate(LocalizationActivity.kt:29)
    at my.base.ui.base.BaseActivity.onCreate(BaseActivity.kt:34)
    at my.base.ui.base.BaseFragNavActivity.onCreate(BaseFragNavActivity.kt:37)
    at my.app.ui.MainActivity.onCreate(MainActivity.kt:40)
    at android.app.Activity.performCreate(Activity.java:5937)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
    ... 10 more

引发异常的行:

private static Event downEvent(State state) {
        switch (state) {
            case INITIALIZED:
                throw new IllegalArgumentException();

依赖关系:

const val navigationFragment = "androidx.navigation:navigation-fragment-ktx:2.3.0"
const val navigationUi = "androidx.navigation:navigation-ui-ktx:2.3.0"

设置代码:

binding.bottomNavigation.setupWithNavController(
            listOf(
                R.navigation.nav1,
                R.navigation.nav2,
                R.navigation.nav3
            ),
            supportFragmentManager,
            R.id.container,
            intent
        ).observe(this) { controller ->
            navController = controller
            controller.addOnDestinationChangedListener(this)
        }

Xml(也尝试过<fragment/>):

<androidx.fragment.app.FragmentContainerView
                android:id="@+id/container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:name="androidx.navigation.fragment.NavHostFragment"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

Google issue tracker(有可重复的样本)

【问题讨论】:

  • 我还不能用干净的应用程序重现它,因为我不确定它为什么会发生” - 这意味着您未能隔离问题。尝试粘贴越来越多的代码,当发现问题再次出现时,再次尝试减少代码。
  • 看这里at my.base.ui.base.DaggerActivity.onCreate(DaggerActivity.kt:26) at my.base.ui.base.delegate.LocalizationActivity.onCreate(LocalizationActivity.kt:29) at my.base.ui.base.BaseActivity.onCreate(BaseActivity.kt:34) at my.base.ui.base.BaseFragNavActivity.onCreate(BaseFragNavActivity.kt:37) at my.app.ui.MainActivity.onCreate(MainActivity.kt:40)
  • @IR42 我已经做了
  • @Fureeish 我终于可以重现它了,issuetracker.google.com/issues/161825212
  • 请在问题中粘贴minimal reproducible example,而不是作为外部链接

标签: android kotlin android-fragments navigation android-navigation


【解决方案1】:

显然问题在于导航图和目的地的 id 相同。 https://issuetracker.google.com/issues/161825212

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多