【发布时间】:2018-12-11 22:12:17
【问题描述】:
我有一个 Activity 应用程序和多个 Fragments 正在使用导航组件进行切换。当我在两个片段之间切换时,它们的 onCreate() 和 onDestroy() 方法似乎重叠。因此,当片段访问相同的全局对象时,我很难为片段编写初始化和清理代码。
从Framgent_A 导航到Fragment_B 具有以下方法顺序:
Fragment_B.onCreate()
Fragment_A.onDestroy()
在Fragment_A.onDestroy() 中,我反转了我在Fragment_A.onCreate() 中执行的操作。在Fragment_B 中,我希望在调用onCreate() 时事情处于中立状态。但情况并非如此,因为尚未调用 Fragment_A.onDestroy()。
Android 上的重叠是正常的还是我在导航组件中配置了错误?有没有另一种方法可以实现我想要做的事情?我知道我可以将两者结合起来Fragments 并使其工作,但我不希望任何一个 Fragment 彼此了解。对我来说,当Fragment_B 被创建时Framgnet_A 仍然活着,而Fragment_B 应该替换Fragment_A 时,这似乎很奇怪。
非常感谢任何帮助!
编辑:
在调试的同时浏览源代码后,我发现在FragmentNavigator.navigate() 中调用了FragmentTransaction.setReorderingAllowed(),这允许重新排序操作,甚至允许在onDestroy() 之前调用新片段的onCreate()以前的。问题仍然存在,在下一个 Fragment 中初始化相同的全局状态之前,如何解决我在一个 Fragment 中正确清理全局状态的问题。
【问题讨论】:
-
Fragment B 和 Fragment A 的 onCreate 和 onDestroy 里面有什么代码?是否在那里完成了耗时的计算?
-
@AADProgramming 它们可以为空,它们的执行顺序保持不变。
-
@rozina 想一想,他们都需要活着才能让画面转场看起来无懈可击,否则转场之间有黑屏的可能吗?仍然没有回答这个问题,因为我和你在同一条船上(媒体资源使用 onPause 和 onResume)
-
如果没有代码,它只是在猜测,但是 1) 你在 onCreate() 中做的事情会在生命周期的后面做得更好(onResume() / onActivityCreated()?2)如果两个片段正在创建或清理一些共同点,然后它们之间存在一些耦合。是否可以由父 Activity 或 Fragment 协调创建和清理?
-
您的全局对象需要访问/清理什么?你应该做还是不做的想法?两个片段都需要通过活动相互通信,而不是相互依赖。如果您可以在这里发布您的代码,那就太好了
标签: android android-architecture-components android-jetpack android-architecture-navigation fragment-lifecycle