[英]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.