我有一个Activity,控制着多个Fragment。默认的Fragment是
我使用
似乎即使从堆栈中弹出,仍会保存有关原始事务的一些数据。
HomepageFragment
。当替换为不同的Fragment时,我总是确保堆栈保持扁平-意味着只有HomepageFragment
保留在堆栈中,并且当前Fragment位于其上方。例如:
- 打开带有
HomepageFragment
的Activity - 需要替换为
FragmentA
- 因为HomepageFragment
是最后一个Fragment,所以一切都很好 - 现在堆栈是
HomepageFragment
->FragmentA
- 需要替换为
FragmentB
- 首先弹出堆栈上的最后一个Fragment(fragmentA
),然后用FragmentB
替换它 - 现在堆栈是
HomepageFragment
->FragmentB
TransactionTooLargeException
崩溃。我使用
TooLargeTool
来追踪问题出现的位置,发现当我在Activity中切换Fragment时,在SaveInstanceState
中有一个android:support:fragments
键,它会越来越大(指数级增长),直到崩溃发生。似乎即使从堆栈中弹出,仍会保存有关原始事务的一些数据。
按照这里的建议移除它会导致 Activity 被操作系统杀掉后无法正确恢复。
我的堆栈平铺方法是否有问题?
是否有更好的方法?
android:support:fragments
下保存了哪些数据?
注意:我没有向这些片段设置任何参数。此外,它们在其saveInstanceState包中保存非常少的数据。
谢谢!
android:support:fragments
键。 - Shirane85