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

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

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

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

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

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

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


当前回答

在我的情况下,我使用finishAffinity()函数在最后的活动,如:

finishAffinity()
startHomeActivity()

希望对大家有用。

其他回答

我为此实现了一个解决方案(我想我在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);
}

简单地说,当您从登录屏幕离开时,而不是在完成登录屏幕时。

然后在所有转发活动中,使用这个来登出:

final Intent intent = new Intent(getBaseContext(), LoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

它工作得很完美。

如果你的应用程序拥有最低sdk版本16,那么你可以使用finishAffinity()

完成此活动以及当前任务中紧接在其下面的具有相同关联的所有活动。

这是我的工作在顶部支付屏幕删除所有后台活动,

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29

在Kotlin中是这样的:

在另一个活动中(包含一些类),在Imports下面

var activity:Activity?=null
    get() = field
    set(value) {
        field = value
    }

然后,在onCreate下面

activity=this

现在在MainActivity中:

activity?.finish()

如果您在屏幕1中登录用户,然后从那里转到其他屏幕,请使用

Intent intent = new Intent(this, Screen1.class);
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);