在更新到新的appcompat库之后,当替换事务中的片段时,我得到了新的片段生命周期。
例如,我有两个片段com.android.support:appcompat-v7:25.1.0
和FrFirst
登录FrSecond
和onStart
,我先用第二个片段替换,然后用第一个片段替换:onStop
。
getActivity().getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content, new FrSecond())
.commit();
在以前的AppCompat版本中,我可以读取以下日志:
frfirst:导航到第二个
第一:停止
第二:开始
第二个:导航到第一个
第二:停止
第一:开始
在25.1.0中,此日志:
frfirst:导航到第二个
第二:开始
第一:停止
第二个:导航到第一个
第一:开始
第二:停止
所以现在
FrFirst -> FrSecond -> FrFirst
的呈现片段调用之前onStart
的电流。为什么方法顺序改变了,这是支持库中的一个bug吗?
最佳答案
这是新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();