Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么每次启动的活动完成时都调用onCreate()?_Android_Android Fragments - Fatal编程技术网

Android 为什么每次启动的活动完成时都调用onCreate()?

Android 为什么每次启动的活动完成时都调用onCreate()?,android,android-fragments,Android,Android Fragments,在我的应用程序中,有一个活动a,它是一个主活动,a中也有几个片段。当你单击其中一个片段中的图像时,它将启动一个新的活动B。当你单击“上一步”按钮时,我将调用finish()完成活动并返回到活动a。但是当返回到活动a时,onCreate()又叫了一次。为什么每次都调用onCreate()?我知道,应该只调用一次,然后调用onStart() 从段到活动B如下所示: Intent i = new Intent(_scontext, ProductListing.class); i.setFlags(I

在我的应用程序中,有一个活动a,它是一个主活动,a中也有几个片段。当你单击其中一个片段中的图像时,它将启动一个新的活动B。当你单击“上一步”按钮时,我将调用finish()完成活动并返回到活动a。但是当返回到活动a时,onCreate()又叫了一次。为什么每次都调用onCreate()?我知道,应该只调用一次,然后调用onStart()

从段到活动B如下所示:

Intent i = new Intent(_scontext, ProductListing.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_scontext.startActivity(i);
getActivity().overridePendingTransition(R.anim.push_out_to_left,R.anim.push_out_to_right);
在活动B中单击“上一步”按钮时,代码段如下所示:

Intent _gobck = new Intent(_ctx,ProductDisplay.class);
startActivity(_gobck);
finish();
overridePendingTransition(R.anim.push_out_to_left,
    R.anim.push_out_to_right);

代码怎么了?我遗漏了什么吗

您将再次开始此活动删除以下代码,它将正常工作

Intent _gobck = new Intent(_ctx,ProductDisplay.class);
startActivity(_gobck);

您将再次开始此活动删除以下代码,它将正常工作

Intent _gobck = new Intent(_ctx,ProductDisplay.class);
startActivity(_gobck);

如果从backPress中删除finish(),则不会创建活动,并且不需要编写意图,它将自行管理其后堆栈。

如果删除finish())从您的backPress活动将不会被创建,您不需要写意图,它将自行管理它的后堆栈。

因为您已经得到了@Rajitha Siriwardena的答案,但我只想澄清这里的一些要点

我知道,应该只调用一次,然后onStart()应该 被叫来

首先,上面的句子不是真的

即使您完成了
活动b
,也有可能让您的
活动a
进入
OnCreate
。如果你的ActivityB在前台停留很长时间,那么你的ActivityA在这种情况下当然会在后台,所以最终你的Activity在
onStop
(记住不要在
onPause
)中,android会说,在
onStop
之后,如果你的应用程序想要到达你的Activity,那么它将进入
onCreate


所以
finish()
ActivityB
会起作用,但是当你这样做时,你的
ActivityA
称为
onCreate

既然你已经得到了@Rajitha Siriwardena的答案,但我只想澄清一下这里的一些要点

我知道,应该只调用一次,然后onStart()应该 被叫来

首先,上面的句子不是真的

即使您完成了
活动b
,也有可能让您的
活动a
进入
OnCreate
。如果你的ActivityB在前台停留很长时间,那么你的ActivityA在这种情况下当然会在后台,所以最终你的Activity在
onStop
(记住不要在
onPause
)中,android会说,在
onStop
之后,如果你的应用程序想要到达你的Activity,那么它将进入
onCreate


因此
finish()。要返回上一个活动调用
finish()
@Raghunandan谢谢:),无需再次启动该活动。要返回上一个活动,请调用
finish()
@Raghunandan谢谢:)