如何从一个活动中关闭我选择的活动

时间:2014-11-11 11:31:48

标签: android android-intent android-activity

实际上这是在采访中提出的一个问题。

我在Android应用程序中有五个活动A,B,C,D和E.我按照他们的顺序打开所有活动,如图所示。现在我必须点击按钮关闭奇怪的活动。此按钮存在于E活动中。

我给出了一个解决方案,我拥有所有活动的静态实例,并且我们可以通过任何活动关闭任何一个活动或其他解决方案,我可以通过意图将一个活动的实例发送到另一个活动,并且在最后一个活动中我们有实例以前的所有活动。现在我们也可以关闭它甚至是什么活动。

但我认为可能还有其他一些选择,最好是上面的。

1 个答案:

答案 0 :(得分:2)

我不建议使用对活动的静态引用。活动实例可能非常大,您将使用静态引用创建内存泄漏。

通过Intent向另一个活动发送Activty实例的建议不起作用。当您通过Intent发送内容时,Android会序列化然后反序列化该对象。接收器获取对象的副本,而不是原始对象。因此,您无法使用此技术在原始对象上调用finish()。此外,只有Android框架才能正确实例化Android组件(ActivityServiceBroadcastReceiverProvider),因此您无法正确反序列化Android组件。

我会使用BraodcastReceiver来做到这一点。每个Activity都应该创建一个BroadcastReceiver并注册它以侦听一些广播的Intent。在这个广播意图中你可以(作为一个额外的)放置应该退出的活动的类名(或名称) - 或者类似于" all"如果所有活动都应该退出当您想要退出特定活动或活动列表时,您应该发送一个带有批准额外内容的braodcast Intent。当BraodcastReceiver的{​​{1}}方法运行时,它可以查看是否应退出,如果是,则可以调用onReceive()