8

好吧,那是我的问题。

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

@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();
    }
4

5 回答 5

3

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

于 2013-01-15T16:39:17.093 回答
1

你没有完成活动。

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();
于 2013-01-15T15:44:04.570 回答
0

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

于 2015-06-03T13:25:24.360 回答
0

如果您在 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));
于 2016-05-12T17:44:51.433 回答
-1

尝试添加这些标志:

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();

于 2013-01-15T16:07:55.380 回答