6

活动 A 有一个按钮,并在onclick它启动新活动 B,新活动只有最小的 onCreate 功能。

在活动中,人工智能按下一个按钮,它使用

startActivity(new Intent(A.this, B.class)) 

启动活动 B。当我运行程序时,按下活动 A 中的按钮,活动 B 开始,但我必须使用两次后退按钮退出并返回第一个活动。

单击 A 中的按钮时,我检查了 logcat,同时创建了两个相同的实例。我还尝试在 Activity B 中使用ToastinonCreate进行调试,这表明当我使用后退按钮时,它会调用onCreate另一个双胞胎 B Activity 中的 。我发现这篇文章单击后退按钮两次以退出不回答问题的活动。

我可以阻止它创建双实例的唯一方法是使用tag:launchMode= "singleInstance"清单中的活动明确限制它。

问题仍然存在:

  1. 为什么它会产生两个实例?
  2. 如何阻止它或如何正确使用它,以免发生这种情况?

更多解释:代码:Activity A 有一个 buttOnClick() 函数,其中有一个 switch(view.getId()) 检查哪个按钮被点击。每个案例都使用特定的整数参数(按钮 id)调用函数动画。在此函数中,switch 再次检查 id 并使用 setAnimationListener 运行与按钮对应的动画。在动画结束时,它要求启动一个新活动。这是它的样子:

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......}
4

1 回答 1

3

意图标志

我自己使用了一套,FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED但这可能有点矫枉过正。

然后就

startActivity(new Intent(A.this, B.class).addFlags(intent_flags));
于 2012-12-29T03:34:23.913 回答