AppCompat Fragment生命周期发生了变化

时间:2016-12-20 06:16:38

标签: android android-fragments android-appcompat android-lifecycle fragment-lifecycle

更新到新的appcompat库com.android.support:appcompat-v7:25.1.0后,在替换事务中的片段时,我有了新的片段生命周期。

E.g。我有两个片段FrFirstFrSecond,其中包含onStartonStop中的日志,我先用第二个替换,然后用第一个替换为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之前调用的片段。

为什么方法顺序发生了变化,这是支持库中的错误吗?

1 个答案:

答案 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();