2018-04-11 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

在集成微信支付的时候  跳转微信支付界面之前的界面  我是在Fragment中写的  但是跳转微信支付成功之后,在Fragment中进行弹窗 点击确定返回执行getFragmentManager().popBackStack();返回上一页时 却报了下图异常

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2055) at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2078) at android.support.v4.app.FragmentManagerImpl.popBackStack(FragmentManager.java:790)

先说解决办法 :

fragmentTransaction.commit(); 改为fragmentTransaction.commitAllowingStateLoss();就可以啦


集成支付宝也是在这个界面 但是却没有闪退  为什么跳转到微信  在回来  却不能调用getFragmentManager().popBackStack() 方法了呢

仔细观察一下  在跳转微信支付之前  界面好像顿了一下    上面的状态栏也变成了微信的状态栏颜色了  但是界面还是本app的界面 

debug一下  发现执行了这个方法 onSaveInstanceState 如下图

查看源码  现在popBackStack方法中    

会执行enqueueAction(OpGenerator action, boolean allowStateLoss) 方法 且allowStateLoss值为false



再点击进去会执行checkStateLoss();方法

到这里 你应该大概明白了 为什么会抛异常了吧  

调用微信支付时 保存了  状态  因此mStateSaved 的值为true

支付成功之后返回Fragment页面  当调用 popBackStack值执行 enqueueAction(new PopBackStackState(null, -1, 0), false);

因此会执行checkStateLoss方法  抛出java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState异常

好了  到此结束  以上个人理解  如有出入  欢迎留言  共同学习共同进步,遇到问题不可怕  可怕的是丢掉了寻找问题根源的勇气

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容