完成活动

时间:2017-03-02 23:12:24

标签: android android-intent android-activity multiple-instances

假设我有3项活动, A B C

A 是我的家庭活动。从 A ,我可以启动 B ,从 B ,我可以启动 C 。我想要实现的是当按回到总是返回到主页活动 A 。所以,在所有情况下,我希望我的活动堆栈是 A - > B ,或 A - > C ,两者之间没什么。

  • 案例1✔

在活动 B 中,我有一个网络侦听器,在调用时,将使用FLAG_ACTIVITY_CLEAR_TOP标志启动相同的活动。所以 A - > B1 - > B2 效果很好,因为 B1 被销毁,我的筹码现在 A - > B2

  • 案例2✔

我还有一个网络监听器,在调用时,将启动活动 C 。在启动活动 C 之前,我致电finish()以销毁活动 B 。所以,同样 A - > B - > C ,结果为 A - > C ,因为我在启动新意图之前调用finish()

  • 案例3:问题

同时调用两个网络侦听器。 B1 正在启动 B2 ,之后, B1 正在启动 C 。所以我遇到以下情况: A - > B1 - > B2 - > ç即可。虽然我在启动 C 之前呼叫finish(),但它当然会销毁 B1 ,因为这是启动 C 意图的活动但是(显然) B2 不会被销毁。 B2 是在 C 之前发布的新实例,因此我坚持使用以下活动堆栈: A - > B2 - > C ,而我想要实现的是 A - > ç即可。 (因为 C 是最后一次启动的活动,我想销毁 B 的所有实例)

在开始活动 C 之前,有没有办法完成所有活动 B ?那么,如果 B1 开始 B2 ,就在此之后, B1 开始 C ,我想要两个 B1 B2 将被销毁。

所有意图都使用FLAG_ACTIVITY_CLEAR_TOP标志启动。

1 个答案:

答案 0 :(得分:1)

Try to use the tag launchMode="singleTask" on your Activity declaration in the AndroidManifest.xml, so you'll only have one instance of it, and when you finish it, there'll be no other instances.

Another way to achieve that is to use the LocalBroadcastManager or an EventBus, and once you want to kill those Activities, you just have to fire a Bradcast/Event and call finish() accordingly.