2011-02-03 134 views
1

我正在构建一个需要用户登录并获取用户ID的应用程序。这个id是我的扩展Application类的成员变量。销毁活动堆栈

我想让应用程序识别何时/如果这个变量被清除了,如果是的话,抛出我的日志屏幕并销毁它后面的Activity堆栈。

这里就是我想我会做的事:

扩展活动和ListActivity(目前只有两种类型我使用的活动)。在onResume()处理程序中,检查是否设置了用户标识。如果没有,请抛出登录屏幕并销毁其后面的Activity堆栈的其余部分。我所有的活动都将来自这些新的扩展活动。

我的问题在于,我不知道如何销毁特定Activity后面的Activity栈。有任何想法吗?

一个想法是有一个广播接收监听一个特定的消息,告诉活动自杀,但我希望Android已经有适合这种情况的东西。

更新:

另外,有没有办法清除整个活动堆栈?我想重写Activity上的onBackPressed()处理程序,并将Activity堆栈炸掉,以便用户重新回到Android主屏幕。

+2

使用FLAG_ACTIVITY_CLEAR_TOP(http://stackoverflow.com/questions/3973092/android-nuke-the-previous-app-history) – danh32 2011-02-03 16:05:23

+0

嗯.. 。在用户登录后,我在Activity的Activity中调用finish();所以它不再是在堆栈上,但我想我不能这样做 – Andrew 2011-02-03 16:20:29

回答

3

我同意danh32,将FLAG_ACTIVITY_CLEAR_TOP设置为将登录活动置于堆栈顶部的意图将会破坏新活动(因此,登录活动)后面的所有活动。这会在堆栈上留下一个活动。

Intent myIntent = new Intent(view.getContext(), DisplayMenu.class); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(myIntent); 
finish(); 

我用这个选项允许用户通过很多活动从长路径回到主屏幕。

7

其他选择将使用AndroidManifest.xml中的noHistory参数来完成此操作。 所以你的活动不应该被放置在历史堆栈

<activity android:name=".MyActivity" 
      android:noHistory="true" />