Preface
Activity 在经过旋转屏幕(或者其他原因导致配置变更)时,该 Activity 将被销毁并重新创建。
如果 Activity 内放置了 Fragment,Fragment 也会被销毁但会被 FragmentManager 恢复出来,这就带来了一个问题:有些 Fragment 因为时效性问题或者其它原因不需要被恢复。
下面就来解决这个问题。
启发
最开始是在 StackOverflow.com 看到了 这个 回答,看了下 Activity 的源码后发现 Fragment 的状态存放在 savedInstanceState.get(FRAGMENTS_TAG)
里,于是只要 savedInstanceState.remove(FRAGMENTS_TAG)
就能防止 Fragment 被恢复了。但这会导致所有的 Fragment 都不能被恢复,而我希望的是不恢复某个 Fragment 就足够了。
后来又花了一些时间调试一下代码,最后把知识都总结到这个类文件里了:
用法
FragmentStateUtil
也很好用:
1 |
|
上述代码可以使 DontRestoreThisFragment
不会被 FragmentManager
恢复出来。