Handling and Mitigating IllegalStateException (“failure saving state: active $Fragment has cleared index: -1”)
我的Android应用程序管理多个片段。但是,我在该字段中看到大量崩溃,其中包含以下日志行:
java.lang.IllegalStateException: Failure saving state: active XxxFragment{81e598 id=0x7f0b0069 tag_yyy} has cleared index: -1
在堆栈溢出中搜索答案是徒劳的;我似乎有很多公司在想这个异常究竟意味着什么。深入到异常跟踪和android源中,我可以看到异常来自我的主要活动保存其状态的点(fragmentactivity.onsaveInstanceState),并且单个片段被写入一个parcelable。每个片段都有一个索引(称为mindex),该索引必须是非负的,但代码中并不清楚为什么一定是这样,因为mindex在该函数中不再使用。
我不知道片段是如何进入这种状态的,也不知道我能做些什么。我无法在自己的测试环境中重现错误。有人能解释一下如何避免和/或处理这个例外吗?
相关销售代表问题:java.lang.illegalStateException:保存失败状态:active已清除片段中的索引
活动片段清除了索引是什么?-1的意思是什么?如何修复它?
将异常作为失败保存状态获取:活动片段已清除索引:当我按下Android设备的Home按钮时,-1
Android碎片的非法状态例外
我将修改我以前的评论,使之成为一个实际的答案。
"您很可能试图执行片段事务,但您没有对片段的正确实例的引用。"
当我读到这些对我来说都是有意义的。我用碎片做了两件错事。
(希望这有帮助。太长了,无法发表评论。)
在我的例子中,我忘记检查在拆卸和连接之前是否添加了
1 2 3 4 5 6 7 | if (fragment != null && fragment.isAdded()) { getSupportFragmentManager() .beginTransaction() .detach(fragment) .attach(fragment) .commit(); } |