首页 > 解决方案 > Android 动态功能导航 DynamicIncludeGraphNavigator ConcurrentModificationException

问题描述

我对Android 动态功能导航有疑问。当我在长时间不活动(或启用不保持活动选项)后回到应用程序时,我的应用程序崩溃了。崩溃来自DynamicIncludeGraphNavigator.onRestoreState()方法,是由java.util.ConcurrentModificationException. 有谁知道如何解决这个问题?

库版本:2.3.0-alpha04

完整的堆栈跟踪:

Caused by: android.view.InflateException: Binary XML file line #19 in activity_main: Error inflating class fragment
     Caused by: java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.remove(ArrayList.java:875)
        at androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.onRestoreState(DynamicIncludeGraphNavigator.kt:122)
        at androidx.navigation.NavController.onGraphCreated(NavController.java:595)
        at androidx.navigation.NavController.setGraph(NavController.java:583)
        at androidx.navigation.NavController.setGraph(NavController.java:548)
        at androidx.navigation.NavController.setGraph(NavController.java:530)
        at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:237)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)
        at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:280)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1175)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:135)
        at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
        at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:356)
        at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:335)
        at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1069)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:997)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:303)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)

DynamicIncludeGraphNavigator.onRestoreState()内容:

override fun onRestoreState(savedState: Bundle) {
        super.onRestoreState(savedState)
        val iterator = createdDestinations.iterator()
        while (iterator.hasNext()) {
            val dynamicNavGraph = iterator.next()
            val moduleName = dynamicNavGraph.moduleName
            if (moduleName == null || !installManager.needsInstall(moduleName)) {
                replaceWithIncludedNav(dynamicNavGraph)
            }
            iterator.remove()
        }
    }

标签: androidandroidxdynamic-feature-module

解决方案


推荐阅读