Android - 强制片段在其创建生命周期中分离/退出
Android - Force fragment to detach / exit while it is still going through its creation lifecycle
我发现当我的应用程序从后台转到前台,并且 OS 杀死了我在后台的进程时,片段会重新经历其创建生命周期。在某些情况下,我不希望我的片段开始。我发现即使我请求我的片段管理器删除 onCreate()
中的片段,它仍然会通过其他生命周期方法。我有什么办法可以让它在创建生命周期中干净退出?
您的问题的简短回答是 否,您不能以任何方式 "short-circuit" Fragment
生命周期。框架不会让你。
现在我给出长答案,为什么。包括 Fragment
和 Activity
在内的各种 类 的生命周期都被设计为遵循一组 生命周期回调 ,原因是GC 必须以正确安排的顺序管理各种对象(例如 View
s、LoaderManager
s 和许多其他对象)的内存,以确保正确清理。如果您尝试执行您所说的 "clean exit",那么您作为程序员必须负责清理内存,而框架不允许您这样做。
您描述的那种 "short-circuit" 或 "clean-exit" 的唯一一次发生是在 OS 杀死前台应用程序(极其罕见)的非常罕见的情况下。在那种情况下,内存只是由 OS 内核而不是 GC 回收。
因此,您需要反省由于阻止 Fragment
完成其生命周期而实际想要实现的目标。无论您的潜在意图是什么,试图通过绕过 Fragment
生命周期来实现这一点都是错误的做法。
进一步考虑:
我想您可能正在寻找 detach()
method, though its hard to tell without understanding what you really want to do. The same Fragment
can be brought back to visible state by calling attach()
。
我发现当我的应用程序从后台转到前台,并且 OS 杀死了我在后台的进程时,片段会重新经历其创建生命周期。在某些情况下,我不希望我的片段开始。我发现即使我请求我的片段管理器删除 onCreate()
中的片段,它仍然会通过其他生命周期方法。我有什么办法可以让它在创建生命周期中干净退出?
您的问题的简短回答是 否,您不能以任何方式 "short-circuit" Fragment
生命周期。框架不会让你。
现在我给出长答案,为什么。包括 Fragment
和 Activity
在内的各种 类 的生命周期都被设计为遵循一组 生命周期回调 ,原因是GC 必须以正确安排的顺序管理各种对象(例如 View
s、LoaderManager
s 和许多其他对象)的内存,以确保正确清理。如果您尝试执行您所说的 "clean exit",那么您作为程序员必须负责清理内存,而框架不允许您这样做。
您描述的那种 "short-circuit" 或 "clean-exit" 的唯一一次发生是在 OS 杀死前台应用程序(极其罕见)的非常罕见的情况下。在那种情况下,内存只是由 OS 内核而不是 GC 回收。
因此,您需要反省由于阻止 Fragment
完成其生命周期而实际想要实现的目标。无论您的潜在意图是什么,试图通过绕过 Fragment
生命周期来实现这一点都是错误的做法。
进一步考虑:
我想您可能正在寻找 detach()
method, though its hard to tell without understanding what you really want to do. The same Fragment
can be brought back to visible state by calling attach()
。