如何从堆栈中清除所有活动?

6
我有困难使用Intent.FLAG_ACTIVITY_CLEAR_TOP和android:launchMode="singleInstance"将所有活动从堆栈中弹出。
在我的应用程序中,活动A通过startActivity启动活动B,然后通过startActivity启动活动C。在活动C中,用户按菜单项返回到活动A。当他们到达活动A时,我只想要A在堆栈中,这样如果他们点击返回按钮,他们就会返回到主屏幕(桌面)。
这是我当前在用户按按钮返回到A时使用的代码:
Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

在项目清单中将所有活动定义为android:launchMode="singleInstance"。

然而,我的代码似乎无法正常工作。当我回到活动A时,如果我点击后退按钮,我会返回到活动C。我是不是误解了如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP?


我也遇到了类似的问题。它已经解决了吗?如果是这样,你是如何解决的? - EnthuDeveloper
2个回答

2

我一直发现确保从堆栈中移除C的最好方法是在startActivity之后调用finish()来移除C。

文档似乎表明事情会按照您预期的方式运行,但似乎并没有发生这种情况,因此使用finish()将确保C被移除。


调用finish()会移除C,但B仍然在堆栈中。我希望A、B、C都在堆栈中,直到用户明确要求从C->A。 - Richard
FLAG_ACTIVITY_CLEAR_TOP会清除B,但是根据我的经验(而且似乎和你的类似),它并不能清除C。因此,如果您结合使用该标志和finish()函数,应该就可以得到您想要的结果了。 - Al Sutton

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接