我有一个具有4个活动的应用程序,按顺序说A->B->C->D和一个服务S,该服务在应用程序启动时由A启动。现在在一个特定的条件下,这个服务触发一个通知,再次应该启动活动C在我的应用程序和参数C通常需要从B。同样为了正常工作,C需要使用来自活动a 的静态变量。
现在发生的事情是当通知从服务S触发时,我点击它,活动A和B被自动销毁,导致强制关闭(因为我的活动C取决于A中的静态变量)。为什么会这样呢?我使用TaskStackBuilder
来放置C的父活动(I。e B)放到堆栈上,以便正常的返回行为将我带回到活动B。
-
活动应该是独立的。
activity C needs to use a static variable from the activity A
是危险的。虽然你创建活动的顺序像A->B->C->D, Android可能会销毁A/B/C/D当你的应用程序在后台,当用户返回到你的应用程序,只有活动D被重新创建。 -
我遇到过一次和你一样的问题,
Starting an Activity from Notification destroys Parent Acitivities
这是因为我使用了TaskStackBuilder。甚至在我停止使用TaskStackBuilder之后,问题仍然存在。只有在我卸载应用程序后,它才像预期的那样工作。查看https://stackoverflow.com/a/28268331/1198666 的注释
这是因为活动生命周期的行为与ICS不同。这个事实回答了这个问题,但是我还没有发现为什么会发生这种情况。如果有人想查看代码并亲自验证此行为,请点击HERE