我有一个控制几个片段的活动。默认片段是HomepageFragment
. 当替换到不同的 Fragment 时,我总是确保堆栈保持平坦 - 这意味着只有HomepageFragment
堆栈中的停留和当前的 Fragment 位于其顶部。例如:
- 活动打开
HomepageFragment
- 需要替换为
FragmentA
- 一切都是好的原因HomepageFragment
是最后一个片段 - 现在堆栈是
HomepageFragment
->FragmentA
- 需要替换为
FragmentB
- 首先弹出堆栈上的最后一个片段 (fragmentA
),而不是替换为FragmentB
- 现在堆栈是
HomepageFragment
->FragmentB
在生产中,我看到很多TransactionTooLargeException
崩溃。
我曾经TooLargeTool
跟踪问题的出处,我发现当我在活动中的片段之间切换时,有一个android:support:fragments
键SaveInstanceState
变得越来越大(以指数方式),直到崩溃发生。
似乎即使从堆栈中弹出,有关原始事务的一些数据也会继续保存。
按照此处的建议将其删除会导致 Activity 在被操作系统杀死后无法正常恢复。
我的压平堆栈的方法有问题吗?有更好的方法吗?到底保存了哪些数据android:support:fragments
?
注意:我没有为这些片段设置任何参数。此外,他们在他们的 saveInstanceState 包中保存了非常小的数据。
谢谢!