用户登录时清除活动堆栈

时间:2011-09-19 20:53:30

标签: android android-intent

这篇文章有很多主题。但我无法找到解决问题的方法。

让我先描述一下activity堆栈。

  

SplashScreen-> A->登录 - >首页

我想要实现的是,当我在登录back后点击Home按钮时,我应该退出应用程序并转到Home如果我使用我的申请再次。为此,我假设在登录之后我应该在Home之前清除活动堆栈。如果用户尚未登录,我还想保留活动堆栈。

我希望这可以在2.1

之后或之后工作

我已经尝试过了。

  1. finish()活动中使用Login,然后在startActivity上致电Home。如果我在Home上使用后退按钮,这会将我重定向到A.

  2. FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP的所有变体形式。什么都没有用,当我使用后退按钮时,我被重定向到登录屏幕。

  3. 实现这一目标的任何建议或简单解决方案?

2 个答案:

答案 0 :(得分:0)

  在finish()上调用Login之前,在startActivity活动中使用Home

。如果我在Home上使用后退按钮,这会将我重定向到A.

确定所以在调用startActivity

之前,请对要播放的所有活动使用完成
  

如果我再次使用我的申请,请转到Home

如果登录成功,只需将您的登录参数直接保存在SharedPreference和A startActivity Home中。

答案 1 :(得分:0)

如果您想尝试这条路线,也可以尝试使用BroadcastReceiver

在“SplashScreen”和“A”活动中,您可以使用onCreate方法创建并注册IntentFilterBroadcastReceiver,如下所示:

假设您有一个名为broadcastReceiver

的全局变量
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("ACTION_LOGIN");

                this.broadcastReceiver = new BroadcastReceiver() {

                    @Override
                    public void onReceive(Context context, Intent intent) {
                        finish();
                    }
                };

                registerReceiver(broadcastReceiver, intentFilter);

另外,请不要忘记在onDestroy方法中注销接收器(这是为了防止程序中的内存泄漏):

    @Override
    protected void onDestroy() {
    unregisterReceiver(this.broadcastReceiver);
    super.onDestroy();
    }

现在,在您的“登录”活动中,一旦用户成功登录,您就可以向所有已注册的接收者广播消息,这将在后台堆栈中完成这些活动:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction("ACTION_LOGIN");
sendBroadcast(broadcastIntent); 

您的SplashScreen和A活动现在将完成。