Android 片段返回堆栈onSaveInstanceState行为

Android 片段返回堆栈onSaveInstanceState行为,android,android-fragments,back-stack,fragment-backstack,Android,Android Fragments,Back Stack,Fragment Backstack,我正在玩碎片后堆栈,我注意到一些奇怪的行为。我编写了一个简单的测试程序,由单个活动和一个片段容器组成。我有两个按钮,一个用片段a的新实例替换当前片段,另一个用片段B的新实例替换当前片段 // On Button A click: FragmentA fragment = FragmentA.newInstance(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentA

我正在玩碎片后堆栈,我注意到一些奇怪的行为。我编写了一个简单的测试程序,由单个活动和一个片段容器组成。我有两个按钮,一个用片段a的新实例替换当前片段,另一个用片段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();
每次片段调用saveInstanceState时,我都会记录

当我在一行中添加10个FragmentA实例,然后停止活动时,我只得到2个onSaveInstanceState调用

当我交替添加FragmentA、FragmentB、FragmentA、FragmentB等时,我得到的onSaveInstanceState调用数量与后堆栈上的片段数量相同

现在是踢球的人。如果我在一行中添加10个FragmentA实例,但每隔一行设置一个字段(例如,一个简单的int字段),那么我将得到10个onSaveInstanceState调用

相反,如果后堆栈上有10个FragmentA实例,每个实例都具有相同的字段值,那么我只得到2个onSaveInstanceState调用


这是怎么回事?Android是否做了一些特别的事情,它注意到后堆栈上有多个相同类型和相同字段值的片段,因此只对其中一些片段调用了onSaveInstanceState?

如果没有人回答你,我可以提出一个建议:每当我问自己Android系统在做什么,我充分利用了Android是开源的,完全可以在Android Studio中浏览这一事实。启动Android studio,开始逐步了解这些方法,然后按照面包屑做,直到你得到答案。如果没有人给你答案,我可以提出一个建议:每当我问自己Android系统在做什么时,我都会利用Android是开源的,完全可以在Android studio中浏览这一事实。启动安卓工作室,开始逐步了解这些方法,然后跟着面包屑走,直到你得到答案。