更新到新的appcompat库com.android.support:appcompat-v7:25.1.0
后,在替换事务中的片段时,我有了新的片段生命周期。
E.g。我有两个片段FrFirst
和FrSecond
,其中包含onStart
和onStop
中的日志,我先用第二个替换,然后用第一个替换为FrFirst -> FrSecond -> FrFirst
。
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content, new FrSecond())
.commit();
在之前的appcompat版本中,我可以阅读此日志:
FrFirst:导航到第二个 FrFirst:停止
FrSecond:开始FrSecond:导航到第一个 FrSecond:停止
FrFirst:开始
在25.1.0中记录:
FrFirst:导航到第二个 FrSecond:开始 FrFirst:停止
FrSecond:导航到第一个 FrFirst:开始 FrSecond:停止
现在onStart
呈现在当前onStop
之前调用的片段。
为什么方法顺序发生了变化,这是支持库中的错误吗?
答案 0 :(得分:6)
这是新appcompat的预期行为。 如此处所述https://code.google.com/p/android/issues/detail?id=230415 这是一个
优化操作和推迟片段转换的新功能,这是一个副作用。
您可以通过调用FragmentTransaction.setAllowOptimization(false)来禁用片段操作优化。这会强制一切以正确的顺序发生,但也不允许优化操作。
因此,如果您想查看旧行为,可以使用禁用的优化替换片段:
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content, new FrSecond())
.setAllowOptimization(false)
.commit();