【问题标题】:AppCompat Fragment lifecycle changedAppCompat 片段生命周期已更改
【发布时间】:2016-12-20 06:16:37
【问题描述】:

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

例如我有两个片段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 的当前。

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

【问题讨论】:

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


【解决方案1】:

这是新 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();

【讨论】:

  • 谢谢!不知道为什么谷歌没有在他们的支持库更改日志中提到这个基本的片段生命周期更改(!!!)..
猜你喜欢
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2020-07-14
  • 2013-06-23
相关资源
最近更新 更多