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
应该仅用于附加目的,例如存储活动引用,将其强制转换到片段将用于与活动交互的某个接口。所以我很确定问题在于用例本身,而不是片段回调。这就是为什么你基本上要做那些黑客。。片段不应该这样使用。