我的应用程序有以下流程屏幕:

主屏->屏1->屏2->屏3->屏4->屏5

现在我在每个屏幕上都有一个公共注销按钮

(主屏/ 1屏/ 2屏/ 3屏/ 4屏/ 5屏)

我想当用户点击注销按钮(从任何屏幕),所有屏幕将完成,一个新的屏幕登录将打开。

我已经尝试了几乎所有的FLAG_ACTIVITY来实现这一点。 我还通过一些答案在stackoverflow,但不能解决这个问题。 我的应用程序是在Android 1.6上,所以不能使用FLAG_ACTIVITY_CLEAR_TASK

有什么办法解决这个问题吗?


当前回答

Intent intent = new Intent(this, classObject);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

这将适用于所有Android版本。其中IntentCompat类添加到Android支持库。

其他回答

你可以尝试Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK。它将完全清除所有以前的活动,并开始新的活动。

我为此实现了一个解决方案(我想我在Stack Overflow的某个地方找到了它,但我不记得了,所以感谢在第一个地方做这件事的人):

在你的任何活动中都这样做:

// Clear your session, remove preferences, etc.
Intent intent  = new Intent(getBaseContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

然后在你的LoginActivity,覆盖onKeyDown:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

顺便说一句,很高兴知道 这个答案有效(https://stackoverflow.com/a/13468685/7034327)

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
this.finish();

然而这行不通

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

. setflags()会替换之前的任何标志,不会追加任何新标志,而. addflags()会。

所以这个也可以

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

我也有同样的问题 你可以像这样使用IntentCompat:

import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

这个代码为我工作。

Android api 17

在启动你的新活动之前,只需添加以下代码:

finishAffinity();

或者如果你想让它在以前的Android版本中工作:

ActivityCompat.finishAffinity(this);