TabGroupActivity android应用程序-注销后阻止返回

TabGroupActivity android应用程序-注销后阻止返回,android,Android,我有一个使用标签组活动的应用程序。标签打开每个活动的方式都很好,但是当用户注销时,我的麻烦就来了。我有一个对话框,确认用户想要注销,当他们单击YES时,它会向url发送一个http请求,终止会话服务器端,清除storepreferences中的一些变量,然后启动登录活动。这一切都很好,但是当用户在登录屏幕上时,如果他们回击,就会返回到他们在退出之前进行的活动。我尝试过添加一些标志,如FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_EXCLUDE_FROM_RECENT

我有一个使用标签组活动的应用程序。标签打开每个活动的方式都很好,但是当用户注销时,我的麻烦就来了。我有一个对话框,确认用户想要注销,当他们单击YES时,它会向url发送一个http请求,终止会话服务器端,清除storepreferences中的一些变量,然后启动登录活动。这一切都很好,但是当用户在登录屏幕上时,如果他们回击,就会返回到他们在退出之前进行的活动。我尝试过添加一些标志,如FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_NO_HISTORY,这些标志似乎都不起作用,它们仍然可以回击并进入上一个活动。因此,我已经覆盖了登录屏幕上的onBackPressed方法,让它将应用程序发送到后台(moveTaskToBack(true))。这似乎是可行的,当我回击时,它会进入主屏幕,但如果我单击应用程序的图标,它不会在我预期的登录屏幕上恢复,而是在用户注销之前的活动上恢复。关于我能做些什么,有什么想法吗?当用户注销时,它会清除所有以前的活动,并将它们与我的登录活动一起显示,而不必返回?提前感谢您的帮助

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

@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"

尝试覆盖Back Press方法,当它单击Back按钮时使其熄灭:

@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"

如果你的最小目标是蜂窝或更高,这是非常容易的。如果你的最小值较低,它会变得稍微复杂一些。使用Honeycomb,您可以向意图添加一些标志,并且效果很好。在较低的API级别中,我发现唯一有保证的方法是启动具有
意图的活动。标记活动\u清除\u 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();
    }
}
家庭活动中

@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;
    }
    //...
}

如果你的最小目标是蜂窝或更高,这是非常容易的。如果你的最小值较低,它会变得稍微复杂一些。使用Honeycomb,您可以向意图添加一些标志,并且效果很好。在较低的API级别中,我发现唯一有保证的方法是启动具有
意图的活动。标记活动\u清除\u 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();
    }
}
家庭活动中

@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;
    }
    //...
}

尝试了这两种选择,但不幸的是,它仍然在做同样的事情。当我在登录屏幕上按“上一步”时,它会按预期转到主屏幕,但当我单击“我的应用程序”图标重新启动时,它会恢复用户在注销前的位置。您是否将noHistory添加到您的登录活动中?是的,但它仍会在上一个活动中恢复。如果你还有别的想法,我可以试试。谢谢你的帮助!!当移动到新活动时,尝试添加以下行:intent.setFlags(intent.FLAG\u activity\u CLEAR\u TOP);尝试了这两种选择,但不幸的是,它仍然在做同样的事情。当我在登录屏幕上按“上一步”时,它会按预期转到主屏幕,但当我单击“我的应用程序”图标重新启动时,它会恢复用户在注销前的位置。您是否将noHistory添加到您的登录活动中?是的,但它仍会在上一个活动中恢复。如果你还有别的想法,我可以试试。谢谢你的帮助!!当移动到新活动时,尝试添加以下行:intent.setFlags(intent.FLAG\u activity\u CLEAR\u TOP);到目前为止,这似乎是可行的,尽管有时应用程序会完全关闭,而不是返回登录屏幕。在我找到更好的解决方案之前,现在可以接受标记。谢谢詹姆斯的帮助!我不知道这怎么可能完全关闭应用程序。在所有情况下,您都将启动一个新的
LoginActivity
。James,您的答案肯定是正确的。保存my tabhost的主类在onDestory()方法中有额外的代码,该方法杀死了应用程序。移除后,它工作正常。谢谢你的帮助!!!到目前为止,这似乎是可行的,尽管有时应用程序会完全关闭,而不是返回登录屏幕。在我找到更好的解决方案之前,现在可以接受标记。谢谢詹姆斯的帮助!我不知道这怎么可能完全关闭应用程序。在所有情况下,您都将启动一个新的
LoginActivity
。James,您的答案肯定是正确的。保存my tabhost的主类在onDestory()方法中有额外的代码,该方法杀死了应用程序。移除后,它工作正常。谢谢你的帮助!!!