从通知启动活动会销毁父活动

4
我有一个包含4个活动的应用程序,按照顺序为A->B->C->D,并且有一个服务S,在启动应用程序时由A启动。现在,在特定条件下,此服务将触发通知,该通知再次应启动应用程序中的活动C,并使用C通常从B获取的参数。此外,为了正常运行,C需要使用来自活动A的静态变量。这就是设置。
现在发生的情况是,当服务S触发通知并且我单击它时,活动A和B会自动销毁,导致强制关闭(因为我的活动C依赖于A中的静态变量)。为什么会发生这种情况?我已经使用TaskStackBuilder将C的父活动(即B)放入堆栈中,以便正常的后退行为将我带回活动B。
有人能告诉我这种行为的原因吗?我不想将我的活动C作为相互依赖的任务运行。我希望它与应用程序中已存在的实例相同。请帮助我理解这里的问题。

太混乱了!没找到真正的问题所在。 - Sahil Mahajan Mj
在正常的工作流程中,活动B开始活动C。 - Ricky
你需要检查用于显示通知的意图。我怀疑它可能是造成问题的原因,例如FLAG_ACTIVITY_CLEAR_TOP或者其他销毁之前活动的操作。但是如果不看代码,仍然无法确定错误。 - Sahil Mahajan Mj
好的,让我看看。但我不认为这种行为可能是由于不同的Android版本引起的。 - Sahil Mahajan Mj
@SahilMahajanMj..好的,请告诉我您的想法,因为我只发现同一应用程序的两次执行中有一件事不同。我还尝试使用两个版本的模拟器进行测试,并发现了相同的行为,这正是让我感到困惑的地方,迫不及待等待您的观察结果。 - Ricky
显示剩余5条评论
2个回答

2
  1. 活动应该是独立的。从活动A中使用静态变量的危险性很大,例如活动C需要使用来自活动A的静态变量。尽管您按照A->B->C->D的顺序创建活动,但当您的应用程序在后台运行时,Android可能会销毁A/B/C/D,并且当用户返回到您的应用程序时,只有活动D被重新创建。

  2. 我曾经遇到和你一样的问题,从通知中启动活动会销毁父活动。这是因为我使用了TaskStackBuilder。即使我停止使用TaskStackBuilder,问题仍然存在。只有在卸载应用程序后,它才能按预期工作。 请查看https://dev59.com/VIfca4cB1Zd3GeqPim_z#28268331中的评论。


0

这是因为从ICS开始,Activity生命周期的行为有所不同。这个事实回答了这个问题,但我还没有找到为什么会发生这种情况。如果有人想要查看代码并验证这种行为,请在此处


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