Skip to content Skip to sidebar Skip to footer

Sdk 25.1.0 Crash On Commitnow When Call Within Onbackstackchanged(). Google Bug?

I have an activity, with 2 fragments FragmentMainOne and FragmentMainTwo that will swap whenever onBackStackChanged() is called public class MainActivity extends AppCompatActivity

Solution 1:

After investigation, looks like this is a new constraint introduced in Support Library 25.1.0.

The crash happens on

privatevoidensureExecReady(boolean allowStateLoss) {
    if (mExecutingActions) {
        thrownewIllegalStateException("FragmentManager is already executing transactions");
    }
    // ... more codes
}

So something has set the mExecutingActions to true.

Found out that in 25.1.0 FragmentManager class, the codes below is new

privatebooleanpopBackStackImmediate(String name, int id, int flags) {
    execPendingActions();
    ensureExecReady(true);

    booleanexecutePop= popBackStackState(mTmpRecords, mTmpIsPop, name, id, flags);
    if (executePop) {
        mExecutingActions = true;
        try {
            optimizeAndExecuteOps(mTmpRecords, mTmpIsPop);
        } finally {
            cleanupExec(); // setting mExecutingAction = false
        }
    }

    doPendingDeferredStart();
    return executePop;
}

Where it set the mExecutingActions to true when popping the fragment stack. This is not set before 25.1.0. I view this as explicit introduce prevention to ensure backstack popping is complete before on commit another fragment.

To workaround the issue, just us commit() instead if commitNow().

For more illustration of the issue, refers to https://medium.com/@elye.project/new-in-support-library-25-1-0-android-disallow-commitnow-on-onbackstackchanged-227c651eefb2#.p9ds8m8ws

Post a Comment for "Sdk 25.1.0 Crash On Commitnow When Call Within Onbackstackchanged(). Google Bug?"