Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK无法使用Android

时间:2013-01-15 15:42:21

标签: android

好吧,那就是我的问题。

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

@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)并且它无法正常工作!它不会删除一堆活动。

任何人都知道为什么?

编辑:我正在检查doc,我发现在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();
    }

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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();

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果你在Intent' i'中添加addFlags您的意图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));

答案 4 :(得分:-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();