1

我有一个使用标签组活动的应用程序。选项卡打开每个活动的方式都可以正常工作,但是当用户注销时我的麻烦就来了。我有一个对话框,确认用户想要注销,当他们单击“是”时,它会向 url 发送一个 http 请求,该请求会终止会话服务器端,从 storepreferences 中清除一些变量,然后启动登录活动。这一切都很好,但是当用户此时处于登录屏幕时,如果他们回击它会将他们带回到他们在注销之前进行的活动。我尝试添加诸如 FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_NO_HISTORY 之类的标志,但似乎都不起作用,它们仍然可以回击并进入上一个活动。所以我' 已覆盖登录屏幕上的 onBackPressed 方法,使其改为将应用程序发送到后台 (moveTaskToBack(true))。这似乎有效,当我回击它时,它会进入主屏幕,但是如果我单击我的应用程序的图标,它不会在我期望的登录屏幕上恢复,而是在用户注销之前的活动上恢复。关于我可以尝试做什么的任何想法,所以当用户退出时,它会清除所有以前的活动并向他们展示我的登录活动而无法返回?预先感谢您的任何帮助!!!关于我可以尝试做什么的任何想法,所以当用户退出时,它会清除所有以前的活动并向他们展示我的登录活动而无法返回?预先感谢您的任何帮助!!!关于我可以尝试做什么的任何想法,所以当用户退出时,它会清除所有以前的活动并向他们展示我的登录活动而无法返回?预先感谢您的任何帮助!!!

4

2 回答 2

1

如果您的最低目标是蜂窝或更高,这很容易。如果您的最小值较低,它会变得稍微复杂一些。使用 Honeycomb,您可以在意图中添加一些标志,并且效果很好。在较低的 API 级别中,我发现的唯一有保证的方法是启动一个活动,Intent.FLAG_ACTIVITY_CLEAR_TOP并让该活动启动您的登录活动,然后完成。

@TargetApi( Build.VERSION_CODES.HONEYCOMB )
private void logout() {

    Intent intent;
    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {

        intent = new Intent( this, LoginActivity.class );
        intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK );
        startActivity( intent );
        finish();
    }
    else {

        intent = new Intent( this, HomeActivity.class );
        intent.putExtra( "logout", true );
        intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
        startActivity( intent );
        finish();
    }
}

HomeActivity

@Override
protected void onCreate( Bundle savedInstanceState ) {

    super.onCreate( savedInstanceState );
    boolean logout = getIntent().getBooleanExtra( "logout", false );
    if ( logout ) {
        startActivity( new Intent( this, LoginActivity.class ) );
        finish();
        return;
    }
    //...
}
于 2013-05-22T14:01:27.420 回答
0

尝试覆盖 Back Press 方法,使其在单击后退按钮时熄灭:

@Override
public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

或者您可以在注销后重定向到视图并使用选项 nohistory 重定向到视图,这可以通过在定义新活动注销的 AndroidManifest 上添加此行来实现

android:noHistory="true"
于 2013-05-22T13:41:28.023 回答