Android 如何阻止startActivity生成同一活动的两个实例
活动A有一个按钮,在其Android 如何阻止startActivity生成同一活动的两个实例,android,back-button,Android,Back Button,活动A有一个按钮,在其onclick中启动新活动B,新活动只有最小的onCreate功能 在活动A中,我按下一个使用 startActivity(new Intent(A.this, B.class)) 启动活动B。当我运行程序时,按下活动A中的按钮,活动B开始,但我必须使用后退按钮两次才能退出并返回到第一个活动 我检查了logcat,当单击A中的按钮时,同时生成了两个相同的实例。我还尝试在活动B的onCreate中使用Toast进行调试,这表明当我使用后退按钮时,它会调用另一个twin B
onclick
中启动新活动B,新活动只有最小的onCreate功能
在活动A中,我按下一个使用
startActivity(new Intent(A.this, B.class))
启动活动B。当我运行程序时,按下活动A中的按钮,活动B开始,但我必须使用后退按钮两次才能退出并返回到第一个活动
我检查了logcat,当单击A中的按钮时,同时生成了两个相同的实例。我还尝试在活动B的onCreate
中使用Toast
进行调试,这表明当我使用后退按钮时,它会调用另一个twin B活动中的onCreate
。我发现这篇文章没有回答这个问题
我可以阻止它创建双实例的唯一方法是使用标记:launchMode=“singleInstance”
将其显式限制为清单中的活动
问题仍然存在:
public void myButtonOnClick(View view)
{
switch (view.getId()) {
case R.id.button1:
animation(1);
break;
//....more lines..... }}
public void animation(int a){
//...code...
switch(a){
case 1:
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
public void onAnimationEnd(Animation arg0) {
Intent in =new Intent(A.this, B.class);
startActivity(in.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ));
animClear();
}
});
break;
//......... other cases......}
我自己使用了一套标记活动|新任务|标记活动|清除|顶部|标记活动|重置|任务|如果需要
,但这可能是一种过度使用
那就
startActivity(new Intent(A.this, B.class).addFlags(intent_flags));
请发布更多的代码。问题很可能是
startActivity()
以某种方式被调用了两次,或者活动B正在启动自身的另一个实例。我不明白为什么要从活动A生成两个实例。您能告诉我@Devunwired活动B如何生成自身的两个实例吗?(它不会启动任何活动)感谢您的回复。我试过了,我的目的是。在我的情况下,只需标记活动清除顶部就可以解决问题。但是你能解释一下,让两个活动而不是一个活动发生意外行为的原因吗。另外,与在清单中添加tag:launchMode=“singleInstance”相比,您的方法有什么好处?最后,解决这个问题的最佳编程方法是什么?谢谢。意外行为可能来自代码中的错误。说到旗帜和舱单。。我会去读一读——这两种方法似乎都有一些解释。谢谢,它清楚地解释了如何以及何时使用这些方法。谢谢,它清楚地解释了如何以及何时使用这些方法。在使用animationlistner处理动画之后,我使用了一个函数,该函数使用switch case处理活动中所有按钮的onClick,以便我的第二个活动在动画结束时开始。在onAnimationEnd内部,我称之为startActivity。这可能是代码中的错误吗?