如何完成除第一项活动以外的所有活动?

时间:2013-08-26 10:49:20

标签: android android-intent

我谷歌它,但即使我在下面运行此代码,它也没有完成其他活动。

ButtonClick.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            LoginManager.getInstance().ctrl = false;
            UserManager.getInstance().loginControl();
            OrderManager.getInstance().orderCtrl = false;
            Intent intent = new Intent(OrderComplete.this,
                    MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            startActivity(intent);
            finish();
        }
    });
}

9 个答案:

答案 0 :(得分:23)

清除代码

下方堆栈使用的热门活动
Intent intents = new Intent(A.this, B.class);
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_CLEAR_TOP
            | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intents);
finish();

它将从堆栈中删除所有活动,或者在应用程序中运行asynctask。

它运作良好,也是一种很好的方法

答案 1 :(得分:7)

更新请参阅其他答案,我无法删除答案,因为它被标记为已接受

根据我们在评论中的讨论

您的代码很好!

<强> Q1。为什么不完成所有活动?

Ans。我认为All Activities Are Finished Except Activities Thread or AysncTask在后​​台运行或尚未完成!

<强> Q2。我怎么能完成它们?

Ans。确保你的线程应该完成!或You can Try Timeout etc


其他

Pass String with Your Intent 

添加代码

intent.putExtra("finishingallact", "yes");

内部第一项活动(尚未完成)

尝试使 Object of Remaining Activities完成它们!

所以试用代码

if(getIntent().getStringExtra("finishingallact")!=null)
{
 if(getIntent().getStringExtra("finishingallact").toLowerCase().equals("yes"))
  {
    yourRemainingAct act1=new yourRemainingAct();
    act1.finish();
    // Try Same For ALl Remaining Activities 
  }
}

答案 2 :(得分:6)

当您从一个活动转到其他活动时,请致电完成();

喜欢这个

public void onClick(View v) {
  Intent i = new Intent(A.this,B.class);

  i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
  startActivity(i);
  finish(); // to end the current activity
 }

在startactivity(...)之后调用finish(),以便从堆栈中删除一个活动ll。按下后退按钮A活动ll不在堆栈中。

答案 3 :(得分:5)

试试这个,我可以正常使用

// clear whole activity stack

    Intent intent = new Intent("clearStackActivity");
    intent.setType("text/plain");
    sendBroadcast(intent);

// start your new activity
Intent intent = new Intent(OrderComplete.this,
                    MainActivity.class);
startActivity(intent);

<强>更新

抱歉,我忘了给这些台词。将这些行放在所有活动的onCreate()方法中,或者如果你有任何基本活动,你可以把它放在那里,那么就不需要放入所有活动。

private KillReceiver clearActivityStack;
clearActivityStack = new KillReceiver();
        registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain"));

<强>更新

很抱歉再忘记将这个课程放在你的基础活动

private final class KillReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            finish();
        }
    }

答案 4 :(得分:4)

除了第一个活动

之外,只删除堆栈中的所有活动
youractivity.this.finish();

或者您可以使用Activity Single顶部。 为此你可以使用:

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

答案 5 :(得分:4)

要在打开新活动时删除所有活动,请执行以下操作

  Intent intent = new Intent(getApplicationContext(), NewAcivity.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(intent);

答案 6 :(得分:2)

我们可以使用:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
  startActivity(i);

答案 7 :(得分:0)

从清单中删除android:launchMode =“singleTop”并使用setFlag intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

答案 8 :(得分:0)

1.如果我们的类中没有asynctask类或线程,那么只需

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

编写此代码,可以轻松删除堆栈中的所有活动

2.这也可以通过将启动器活动设为单一任务来完成 这可以通过清单文件中的更改来完成。 如

android:launchMode="singleTask" 

3.但是如果我们的应用程序中有asynctask并且还使用了线程,则上述两种方法都会失败..

为此我们必须逐个完成活动

例如。 我们有四个活动A,B,C,D,每个班级都有异步任务

,我们必须从A - &gt; B-&GT; C-&GT; d

来自D我们再次回到* “A” ,按下设备的后退按钮应用程序应该完成或者可以说退出< / EM> *

为此,我们必须制作所有类活动的静态对象。像

 **In class A**
     public static Avtivity mactivity;
     @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_third);
            mactivity=this;
             }

在所有B,C类

中执行此操作

然后在D

按下按钮 完成所有类的对象 像

** mButton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) 
        {
            B mB=new B();
            mB.mactivity.finish();
                   //////do this for all class which are present in stack of activities
                            finish();
                            ////this will finish the D class and we reach at A class
                    }
                  });**

多数民众赞成解决......

我知道它不是一种粗鲁的方式,但也不是一种糟糕的方式......主要的是它的工作方式:)