android中的Ghost活动

时间:2013-11-08 14:28:27

标签: java android android-intent android-activity

我的申请表如下:

一开始我有一些AppStartActivity可以做某事,自己完成并在用户登录后启动MainActivity,否则启动LoginActivity

当用户成功登录时,

LoginActivity完成并启动MainActivity

MainActivity我有SomeActivity用户可以退出。此情况的活动堆栈为MainActivity > SomeActivity。这是正确的,后退按钮效果很好。当用户单击LogOut按钮时出现问题。我需要显示LoginActivity,但我不想再将MainActivitySomeActivity放在活动堆栈上。

如果我不完成AppStartActivity,我可以解决这个问题。我可以带着旗帜FLAG_ACTIVITY_CLEAR_TOP返回,它会运作良好。但这是后退按钮的问题。我不希望用户使用后退按钮返回此活动。我想让它退出应用程序。

更新:

标志FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK最好,但我需要它在API级别9中工作。

3 个答案:

答案 0 :(得分:1)

当用户想要注销时,您只需使用MainActivity启动Intent.FLAG_ACTIVITY_CLEAR_TOP,然后在Intent中传递额外信息,告知MainActivity用户已注销。 MainActivity然后可以立即启动LoginActivity并完成自己。

有关如何执行此操作的详细信息,请参阅我对Remove top activity from stack android的回答。

答案 1 :(得分:0)

如果我理解正确,您似乎只在finish()中遗失SomeActivity

  这种情况的堆栈是MainActivity> SomeActivity

点击LogoutButton

onClick(View v)
{
    Intent i = new Intent(SomeActivity.this, LoginActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITIY_CLEAR_TOP);
    startActivity(i);
    finish();
}
  
    

这种情况的堆栈是LoginActivity

  

点击“返回”Button退出应用

答案 2 :(得分:0)

一般的技巧是使用BroadcastReceiver并广播你的所有活动“嘿,请完成(),因为用户正在退出”。这将清除您的活动堆栈,并阻止用户按回到您应用的“登录”部分。

有关详细信息,请参阅On logout, clear Activity history stack, preventing "back" button from opening logged-in-only Activites