首页 > 解决方案 > LifecycleRegistry 的 popParentState 处的 ArrayIndexOutOfBoundsException

问题描述

当将架构组件添加到片段时,我一直面临着这种奇怪的崩溃,崩溃是随机 发生navigation bottom barLifecycleObserver

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
       at java.util.ArrayList.remove(ArrayList.java:405)
       at android.arch.lifecycle.LifecycleRegistry.popParentState(LifecycleRegistry.java:194)
       at android.arch.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:293)
       at android.arch.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:332)
       at android.arch.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:137)
       at android.arch.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:123)
       at android.support.v4.app.Fragment.performStart(Fragment.java:2380)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1467)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
       at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
       at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
       at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:158)
       at android.app.ActivityThread.main(ActivityThread.java:7225)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

替换该片段后发生崩溃我的代码的代码跟踪从这里开始

getSupportFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
                .replace(R.id.flMain, fragment, tabModel.getName())
                .addToBackStack(BACK_STACK_ROOT_TAG)
                .commitAllowingStateLoss();

这里有什么可能的问题?

标签: androidandroid-fragmentsandroid-lifecycleandroid-architecture-componentsandroid-jetpack

解决方案


您必须确保您的操作在 UI 线程中

getSupportFragmentManager()
            .beginTransaction()
            .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
            .replace(R.id.flMain, fragment, tabModel.getName())
            .addToBackStack(BACK_STACK_ROOT_TAG)
            .commitAllowingStateLoss();

推荐阅读