实际上这是在采访中提出的一个问题。
我在Android应用程序中有五个活动A,B,C,D和E.我按照他们的顺序打开所有活动,如图所示。现在我必须点击按钮关闭奇怪的活动。此按钮存在于E活动中。
我给出了一个解决方案,我拥有所有活动的静态实例,并且我们可以通过任何活动关闭任何一个活动或其他解决方案,我可以通过意图将一个活动的实例发送到另一个活动,并且在最后一个活动中我们有实例以前的所有活动。现在我们也可以关闭它甚至是什么活动。
但我认为可能还有其他一些选择,最好是上面的。
答案 0 :(得分:2)
我不建议使用对活动的静态引用。活动实例可能非常大,您将使用静态引用创建内存泄漏。
通过Intent
向另一个活动发送Activty实例的建议不起作用。当您通过Intent
发送内容时,Android会序列化然后反序列化该对象。接收器获取对象的副本,而不是原始对象。因此,您无法使用此技术在原始对象上调用finish()
。此外,只有Android框架才能正确实例化Android组件(Activity
,Service
,BroadcastReceiver
,Provider
),因此您无法正确反序列化Android组件。
我会使用BraodcastReceiver
来做到这一点。每个Activity都应该创建一个BroadcastReceiver
并注册它以侦听一些广播的Intent。在这个广播意图中你可以(作为一个额外的)放置应该退出的活动的类名(或名称) - 或者类似于" all"如果所有活动都应该退出当您想要退出特定活动或活动列表时,您应该发送一个带有批准额外内容的braodcast Intent。当BraodcastReceiver
的{{1}}方法运行时,它可以查看是否应退出,如果是,则可以调用onReceive()
。