【问题标题】:Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK not working AndroidIntent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK 不工作 Android
【发布时间】:2016-05-13 09:58:13
【问题描述】:

好吧,那是我的问题。

我需要,当用户按下后底部时,删除所有打开的活动的堆栈:

@Override
public void onBackPressed(){
    Intent i = new Intent(context, CrisolMainApp.class);
    i.putExtra(CrisolMainApp.CERRAR_APP, true);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);
}

关键是这适用于我的大多数手机,但昨天我尝试使用三星 Galaxy Mini(android 2.3.3)但它无法正常工作!它不会删除活动堆栈。

有人知道为什么吗?

编辑:我正在检查文档,我发现 API 11 上添加了“Intent.FLAG_ACTIVITY_CLEAR_TASK”(我的三星 Galaxy Mini 适用于 Android 2.3.3,因此 API 10)..... ..我不知道,但我想这就是问题所在。

任何人都知道我怎样才能让它在 API 小于 11 时以相同的方式工作?

我尝试添加这些标志,但它也不起作用:

@Override
public void onBackPressed(){
    Intent a = new Intent(this, CrisolMainApp.class);
    a.putExtra(CrisolMainApp.CERRAR_APP, true);
    a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
    a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    a.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(a);
    finish();
}

我也试过了:

@Override
    public void onBackPressed(){
        Intent a = new Intent(this, CrisolMainApp.class);
        a.putExtra(CrisolMainApp.CERRAR_APP, true);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        a.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(a);
        finish();
    }

【问题讨论】:

  • 那么您发现它为什么不起作用了吗?我面临同样的问题,感觉永远卡住了
  • 这是 Android 11 的新标志。因此您必须以编程方式检查版本并采取相应措施!它不仅适用于

标签: android


【解决方案1】:

一个简单的解决方法应该是将 xml 属性 android:noHistory="true" 添加到您的所有活动中,这意味着一旦用户离开该活动,它就会消失,并且不会存储任何返回堆栈

【讨论】:

  • 是的,这可能是一个解决方案,但如果我这样做,每次活动都会消失,这不是我想要的。我只是希望它们在我单击后退按钮时消失......无论如何谢谢!
【解决方案2】:

您没有完成活动。

Intent i = new Intent(context, CrisolMainApp.class);
i.putExtra(CrisolMainApp.CERRAR_APP, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();

【讨论】:

  • 谢谢,但它也不起作用......我在startActivity之后添加了finish()方法,但仍然不起作用。奇怪的是,它适用于我之前尝试过的所有手机......(三星 Galaxy SII、Galaxy Nexus、LG Optimus Black)......它只是不适用于三星 Galaxy Mini。
  • 使用 IntentCompat 代替 Intent。 FLAG_ACTIVITY_CLEAR_TASK 仅适用于 API 级别 >11
  • @Daksh 你到底应该如何使用 IntentCompat?它的用法对我来说并不明显。
【解决方案3】:

您可以使用 IntentCompat.FLAG_ACTIVITY_CLEAR_TASK 并从支持库中导入 import android.support.v4.content.IntentCompat; 以处理 API 10。

【讨论】:

    【解决方案4】:

    如果您在 Intent 'i' 中添加 addFlags,您的 Intent ACTION_SEND 将不起作用,但如果在响应 createChooser() 中添加 addFlags,则仅创建一个 ACTION_SEND 实例。

     if (i == null) i = new Intent();
                i.setAction(Intent.ACTION_SEND);
                i.putExtra(Intent.EXTRA_STREAM, getImageUri());
                i.setType(Constantes.IMAGE_STREAM);
                startActivity(Intent.createChooser(i, messageShare).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
    

    【讨论】:

    • 你应该添加一些文字来解释你的代码是如何工作的,答案不是很清楚。
    【解决方案5】:

    尝试添加这些标志:

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //use this if you want to clear the stack
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); // use this if you don't want to clear your home activity
    

    这应该清除堆栈中的所有活动,除了这个被带到前面的活动。 您不需要使用finish();

    【讨论】:

    • @jorgeAndroid 你试过不调用 finish() 吗?
    猜你喜欢
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2021-12-07
    相关资源
    最近更新 更多