我正在玩片段后栈,我注意到了一些奇怪的行为。我写了一个简单的测试程序,包含一个带有片段容器的活动。我有一个两个按钮,一个用Fragment A的新实例替换当前片段,另一个用Fragment B的新实例替换当前片段。
// On Button A click:
FragmentA fragment = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentA).addToBackStack(null).commit();
// On Button B click:
FragmentB fragment = FragmentB.newInstance();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentB).addToBackStack(null).commit();
每次片段调用onSaveInstanceState时都会记录。
当我连续添加10个FragmentA实例时,然后停止活动,我只得到2个onSaveInstanceState调用。
当我在添加FragmentA,FragmentB,FragmentA,FragmentB等之间交替时,我得到相同数量的onSaveInstanceState调用,因为后面的堆栈上有片段。
现在这里是踢球者。如果我连续添加10个FragmentA实例,但是在每个上设置一个字段(例如,一个简单的int字段),那么我将获得10个onSaveInstanceState调用。
相反,如果后端堆栈上有10个FragmentA实例,每个实例都具有相同的确切字段值,那么我只能获得2个onSaveInstanceState调用。
这里发生了什么? Android是否会在后备堆栈上注意到相同类型和相同字段值的多个片段时会做一些特殊的事情,因此只会在其中一些片段上调用onSaveInstanceState?