替换片段时的onPause()和onResume()顺序

时间:2017-04-19 16:41:09

标签: android android-fragments android-lifecycle

我使用此代码转换了2个片段:

 private void switchTo(Fragment frag) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction transaction = fm.beginTransaction();
    transaction.replace(R.id.contentPanel, frag);
    transaction.commit();
}

当我在2个碎片之间转换时,我需要在两者之间进行一些清理。我把这个清理代码放在片段的onPause()方法中。现在的问题是第二个片段的onResume()发生在第一个片段的onPause()之前

我在每个片段的两个片段的onPause(),onResume()和onStop()中放置了一个print语句,这就是它将它吐出的顺序。

FRAGMENT 2 RESUMED
FRAGMENT 1 PAUSED
FRAGMENT 1 STOPPED

有没有办法协调这两个片段,以便我可以在每次过渡之间进行清理?

1 个答案:

答案 0 :(得分:1)

在提交之前执行transaction.setAllowOptimization(false)

Google引入了优化,默认情况下在最新版本的支持库中启用了优化。

来自docs

  

优化的副作用是片段的状态更改可能超出预期的顺序。例如,一个事务添加片段A,第二个事件添加片段B,然后第三个事件添加片段A.没有优化,片段B可以预期在创建片段时,片段A也将存在,因为片段A将在片段B之后被删除加入。通过优化,片段B不能指望片段A在创建时存在,因为片段A的添加/删除将被优化。

这些优化有时会破坏我们作为该API用户所依赖的逻辑。