Android 如果活动正在完成,如何防止对onCreate/onCreateView方法的调用
我有一个Android 如果活动正在完成,如何防止对onCreate/onCreateView方法的调用,android,oncreate,Android,Oncreate,我有一个活动a,其中包含一个片段a onAttach()方法的fragmentA,我需要检查一些条件,如果失败,我需要完成活动。 我正在通过调用getActivity().finish()来完成活动 即使在我调用finish方法之后,它仍然在调用fragmentA中的onCreate()、onCreateView()和onViewCreated()方法 有什么方法可以停止这些调用吗?正如@DeeV评论的那样,我会在附加片段之前检查条件。在这种情况下,您根本不必处理片段生命周期,这是一种更干净的方
活动a
,其中包含一个片段a
onAttach()
方法的fragmentA
,我需要检查一些条件,如果失败,我需要完成活动。
我正在通过调用getActivity().finish()
来完成活动
即使在我调用finish方法之后,它仍然在调用fragmentA
中的onCreate()
、onCreateView()
和onViewCreated()
方法
有什么方法可以停止这些调用吗?正如@DeeV评论的那样,我会在附加
片段之前检查条件。在这种情况下,您根本不必处理片段生命周期,这是一种更干净的方法
如果这是不可能的,有一个黑客的方式。您可以在onAttach()
中调用finish()
,然后使用活动的方法isFinishing()
,该方法返回一个布尔标记。我认为这应该解决问题
例如,在片段的onCreate
方法中:
if (getActivity().isFinishing()) {
// finish was called in onAttach
}
在将片段添加到活动之前,您能检查这些条件吗?谢谢您的建议。在我的例子中,我需要在onAttach()方法中进行此检查谢谢Gennadii是的,这是一个选项,但我需要在所有方法中进行isFinishing()检查,如onCreate()、onViewCreated()、onViewRestored()方法。因此,我想知道除了在这些方法中添加此检查之外是否还有其他选择。不,我认为不可能避免这种情况。它在android中的工作方式是将诸如onCreate()
、onStart()
等消息添加到UI消息队列,这意味着它们将被处理,除非您明确地从队列中删除它们。当然,您不能将它们从队列中删除,因为您没有Runnable
或令牌来执行此操作。因此,您可以通过isFinishing()
方法调用来使用这种黑客方式,或者尝试避免附加片段本身。你确定你不能避免吗?我认为这应该是您的主要关注点,试图避免碎片附加事件。整个情况在我看来是错误的:碎片决定是否应该在附加到它时关闭活动onAttach
应该仅用于附加目的,例如存储活动引用,将其强制转换到片段将用于与活动交互的某个接口。所以我很确定问题在于用例本身,而不是片段回调。这就是为什么你基本上要做那些黑客。。片段不应该这样使用。