Android IllegalStateException-片段支持库

Android IllegalStateException-片段支持库,android,illegalstateexception,Android,Illegalstateexception,我的应用程序在某些用户设备上持续崩溃,这是一个严重问题,Activity onStart方法中存在以下异常: Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299) at androi

我的应用程序在某些用户设备上持续崩溃,这是一个严重问题,Activity onStart方法中存在以下异常:

Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
at android.support.v4.app.DialogFragment.show(DialogFragment.java:123) 
我无法在模拟器中本地复制此错误。我在stackoverflow上发现了一些有关此问题的问题: 和

我已经尝试了建议的解决方案,即不允许onSaveInstance中的空捆绑包在片段或活动中

然而,问题依然存在。这是我收到的唯一一份车祸报告,我不断收到


有人有有效的解决方案吗

我已经通过

  • 将我的支持库升级到修订版10
  • 使用此处发布的变通方法: i、 e..在onResumeFragments中添加一个非ui片段,并在侦听器回调中调用进一步的事务
请在此处查看我的答案以获取代码:

到目前为止还没有收到任何非法状态异常。

我使用解决了这个问题,即将代码放入活动中的methods
onPostResume()
函数中

以及

一旦理解了问题,请继续正确地进行更改:

找出事务发生在onResume状态之外的原因。为什么这些事情发生在不应该发生的时候。为什么要手动添加和删除应用程序生命周期相关的片段,而不是在用户请求时添加和删除片段。您可能需要在onCreate()中或在用户调用某些内容时使用一次。但是你为什么要在onResume()中与他们为伍呢?不要那样做

如果将所有的
.commit()
更改为
.commitAllowStateLoss()
,则崩溃将消失。但是,你最好不要那样做。你最好确保你永远不会改变你的片段,除非应用程序完全激活。有时,这意味着永远不要从OnActivityResult()加载片段,而是标记为在onPostResume()中运行,并避免在异步线程中执行UI更改,因为异步线程错误地认为您不可能同时终止活动

如果您只想对所有内容进行垃圾邮件打包,
.commitAllowStateLoss()
将完成此操作。如果你想把它做好,确保在东西死后不要乱动你的碎片


我认为,安卓circa Oreo的最新形式之一改变了这一点,以避免这个恼人的错误。我的回答似乎有点含糊,但这是因为错误在范例中。你完全可以通过各种代码元素和相当常规的方式来达到这一点。

否决投票:onPostResume不适用于android.support.v4.app。Fragment@Loda它出现在android.support.v4.app.FragmentActivity中,而不是FragmentNo中,因为我在onPostResume中从后台弹出时遇到此异常,即,这不是修复。