Android活动OnCreate被调用两次

时间:2019-11-03 10:25:28

标签: android android-activity

我这样开始第二个活动:

Intent intentNotAuthorized = new Intent(SplashScreen.this, NotAthorized.class);
            intentNotAuthorized.putExtra("message","dummy");
            intentNotAuthorized.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intentNotAuthorized);
            finish();

使用:回到第一个活动时

      Intent intentSplash = new Intent(NotAthorized.this, SplashScreen.class);
        intentSplash.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intentSplash);
        finish();

创建第一个活动时,Oncreate被称为twise

2 个答案:

答案 0 :(得分:0)

要点是,您不应该想要创建意图,返回回到第一个活动。

正确的方法是在第二个活动中调用 finish() 方法。

答案 1 :(得分:0)

选项1:

当您尝试使用意图中的值启动活动时,我已经观察到此问题。

下面是一个示例,其中Activity_A调用Activity_B并传递要在Activity_B中收集的意图中的值:

Intent intent = new Intent(this, activityB.class);
intent.putExtra("val1", someValue1);
intent.putExtra("val2", someValue2);
intent.putExtra("val3", someValue3);
this.StartActivity(intent);
finish();
  

清单文件:

在这种情况下,您可以在android:launchMode="singleInstance"中设置android:launchModel="singleTop"AndroidManifest.xml,Activity_B只会启动一次。希望这会有所帮助。

选项2:

我认为纳撒尼尔(Nathaniel)为您提供了很好的建议,可以将您的相机意图转移到onResume中。

但是,您需要区分一个onResume(它是您的第一次活动)和由于摄像机意图完成后您的活动恢复而正在发生的活动。如果不这样做,您将看到循环。

为此,您可以更改onActivityResult()来在Activity中设置一个名为isResumingFromCaptureIntent之类的成员变量。当resultCode与您用来启动相机意图的内容相匹配时,请在onActivityResult中将其设置为true。然后,在onResume中,检查isResumingFromCaptureIntent,如果为true,则表示您不需要启动摄影机意图,可以将其设置为false,然后继续进行您的活动需要做的任何事情。