繁体   English   中英

Android 活动 OnCreate 被调用两次

[英]Android activity OnCreate is called twice

我像这样开始我的第二个活动:

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

当 go 回到第一个活动时,使用:

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

当第一个活动被创建时 Oncreate 被调用两次

关键是当你想回到第一个活动时,你不应该创建一个意图。

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

选项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();

清单文件:

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

选项 2:

我认为 Nathaniel 给了你很好的建议,将你的相机意图转移到 onResume 中。

但是,您需要区分 onResume 是您的第一次开始的活动和一个正在发生的活动,因为您的活动在相机意图完成后恢复。 如果你不这样做,你会得到你看到的循环。

为此,您可以更改onActivityResult()以在 Activity 中设置一个名为 isResumingFromCaptureIntent 的成员变量。 当 resultCode 与您用于启动相机意图的内容匹配时,在 onActivityResult 中将其设置为 true。 然后,在您的 onResume 中,检查 isResumingFromCaptureIntent,如果为 true,您知道您不需要启动相机意图,并且可以设置为 false,然后继续您的活动需要执行的任何其他操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM