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

mst*_*fdz 23 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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

Kim*_*gra 28

从代码下面的堆栈使用中清除顶级活动

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();
Run Code Online (Sandbox Code Playgroud)

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

它工作正常,也是一个很好的方法


Avi*_*jit 7

当你从一个活动到另一个活动时,调用finish();

这样做

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
 }
Run Code Online (Sandbox Code Playgroud)

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


Tar*_*ngh 7

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

根据我们在评论中的讨论

你的代码很好!

Q1.为什么不完成所有的活动?

答.我想All Activities Are Finished Except Activities谁已经Thread or AysncTask在后台运行或者还没有完成!

Q2.我怎么能完成它们?

答.确保您的线程应该完成!或者You can Try Timeout etc!


额外

Pass String with Your Intent 
Run Code Online (Sandbox Code Playgroud)

为此添加代码

intent.putExtra("finishingallact", "yes");
Run Code Online (Sandbox Code Playgroud)

内部第一活动(不完成)

尝试 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 
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,它对我来说很好,再次感谢. (2认同)

Pan*_*ora 6

只需从堆栈中删除除第一个活动之外的所有活动

youractivity.this.finish();
Run Code Online (Sandbox Code Playgroud)

或者您可以使用活动单顶。为此,您可以使用:

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)


Bir*_*dia 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);
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

private KillReceiver clearActivityStack;
clearActivityStack = new KillReceiver();
        registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain"));
Run Code Online (Sandbox Code Playgroud)

UPDATE

很遗憾再忘记将这个课程放在你的Base活动中

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