Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState #1031

Closed
zhijianz opened this issue Nov 12, 2018 · 3 comments

Comments

@zhijianz
Copy link

  • Library version:1.3.5
  • Support-v4 version:28.0.0
  • Logs
11-11 15:05:35.162 21530 21530 E CrashHandler: UncaughtException detected: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2080)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2106)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.support.v4.app.FragmentManagerImpl.popBackStack(FragmentManager.java:832)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.support.v4.app.FragmentationMagician$3.run(FragmentationMagician.java:121)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.support.v4.app.FragmentationMagician.a(FragmentationMagician.java:194)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.support.v4.app.FragmentationMagician.a(FragmentationMagician.java:118)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.TransactionDelegate.safePopTo(TransactionDelegate.java:574)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.TransactionDelegate.mockPopToAnim(TransactionDelegate.java:604)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.TransactionDelegate.doPopTo(TransactionDelegate.java:561)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.TransactionDelegate.access$1300(TransactionDelegate.java:32)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.TransactionDelegate$11.a(TransactionDelegate.java:289)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.queue.ActionQueue.a(ActionQueue.java:53)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.queue.ActionQueue.b(ActionQueue.java:45)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.queue.ActionQueue.a(ActionQueue.java:17)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at me.yokeyword.fragmentation.queue.ActionQueue$1.run(ActionQueue.java:37)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.os.Handler.handleCallback(Handler.java:836)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.os.Handler.dispatchMessage(Handler.java:103)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.os.Looper.loop(Looper.java:203)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at android.app.ActivityThread.main(ActivityThread.java:6275)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at java.lang.reflect.Method.invoke(Native Method)
11-11 15:05:35.162 21530 21530 E CrashHandler: 	at com.android.internal.os.ZygoteInit$Metho

最近升级support包到28包之后突然出现比较多的这种类型崩溃。之前有看到 #863 报出相似问题,看了下修复的代码的逻辑方式还是单独判断mStateSaved。


    public static boolean isStateSaved(FragmentManager fragmentManager) {
        if (!(fragmentManager instanceof FragmentManagerImpl))
            return false;
        try {
            FragmentManagerImpl fragmentManagerImpl = (FragmentManagerImpl) fragmentManager;
            return fragmentManagerImpl.mStateSaved;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    private static void hookStateSaved(FragmentManager fragmentManager, Runnable runnable) {
        if (!(fragmentManager instanceof FragmentManagerImpl)) return;

        FragmentManagerImpl fragmentManagerImpl = (FragmentManagerImpl) fragmentManager;
        if (isStateSaved(fragmentManager)) {
            fragmentManagerImpl.mStateSaved = false;
            compatRunAction(fragmentManagerImpl, runnable);
            fragmentManagerImpl.mStateSaved = true;
        } else {
            runnable.run();
        }
    }

是否会存在mStopped == true. mStateSaved == false的情况导致出现目前的崩溃

@limuhai
Copy link

limuhai commented Jan 15, 2019

请问该问题解决了吗?1.3.6配套27.1.1也出现了

@wilsonssss
Copy link

facing the same issue

YoKeyword added a commit that referenced this issue Jun 7, 2019
@YoKeyword
Copy link
Owner

v1.3.7已解决, 9e2dbdf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants