什么时候使用addFlags或setFlags删除堆栈中的活动?

时间:2019-04-02 06:29:49

标签: android android-activity

我有OnBoard活动和Login活动。成功登录后,在LoginActivity中,我尝试使用以下代码清除登机活动:

startActivity(new Intent(context, HomeActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK));

我什至尝试了Intent.FLAG_ACTIVITY_NO_HISTORY,但是它也没有用。那我该怎么办?

5 个答案:

答案 0 :(得分:0)

尝试以下代码:

    Intent intent = new Intent(context, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);

答案 1 :(得分:0)

我想说的是if (layer.raster.constructor.name === 'ValueRaster') { (layer.raster as ValueRaster).doMoreStuff(); } else if (layer.raster.constructor.name === 'ZoneRaster') { (layer.raster as ZoneRaster).doMoreStuff(); } ,然后再开始参加板载活动。无需设置任何标志。因为此方法会杀死堆栈中的所有活动以及当前活动

答案 2 :(得分:0)

不需要使用FLAGS。即使您想了解,也请勾选this

有两种方法可以完成当前活动(在您的情况下为LoginActivity)和移至下一个活动(在您的情况下为OnBoard)。

  1. 在开始第二活动之前,致电finish()。它将破坏当前的活动。
  2. 在开始第二活动之前,致电finishAffinity();。它将破坏所有先前活动的堆栈。

希望对您有帮助。

答案 3 :(得分:0)

为此您有两个选择

您可以使用

第一个解决方案:-

    Intent intent = new Intent(context, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);

第二个解决方案:-

致电finishAffinity();  在开始第二活动之前。

答案 4 :(得分:0)

我假设应用程序以OnboardActivity开头,并且以LoginActivity开头,然后您想同时清除它们并启动HomeActivity

如果是这样,我会这样:

  • OnboardActivity使用LoginActivity启动startActivityForResult()
  • LoginActivity返回指示登录是否成功的结果,并调用finish()LoginActivity不再在任务中。
  • OnboardActivityOnActivityResult()中检查结果,如果登录成功,则启动HomeActivity(不需要标志)并自行调用finish()
  • 这时,LoginActivityOnboardActivity都不见了,HomeActivity是任务中唯一的Activity