我面临以下非常恼人的问题:
我正在使用谷歌兼容性库,以便未来证明我的应用程序。现在…我在跟踪我的backstack
:
1)启动App。
2)用户交互A ->片段被添加到UI/Back Stack。
--- Backstack Size: 1 ---
3)用户"背景"的应用程序。
4)用户使用Taskkiller杀死应用程序/或应用程序被android系统杀死
5)再次启动应用程序。完全重启呈现给用户的应用程序(Application.onCreate()
)。
6)用户交互A ->片段被添加到UI/Back Stack。
--- Backstack Size: 2 ---
此时,我希望backstack的大小为1。
如果用户现在按下back
,应用程序会把他带回到以前的状态,这已经没有意义了,因为应用程序呈现了一个新的开始。
你知道怎么做吗??
Thx
虽然您的应用程序确实已被杀死,但当您尝试再次启动它时,技术上并不存在"完全重启"。这当然不是Android希望你考虑这种情况的方式。
当你后台你的应用程序,Android将保存已添加到片段管理器的片段的状态(以及哪些活动的状态是开放的,和他们的视图状态)。当你在被杀死后重新启动应用时,Android会把所有这些状态都还给你,所以你应该能够从你离开的地方重新开始。这意味着你应该考虑"用户交互A"已经发生了,你实际上又回到了步骤2)。正如你所注意到的,backstack被保留了下来;这是因为您执行的片段事务也被保留。
问题当然是,我们并不总是以匹配这种行为的方式编写应用程序。如果你的应用程序在后台被杀死后呈现一个"新的开始",那么可以说它并没有真正遵循Android的方法(假设有一些值得保存的用户状态)。
我认为你应该尽你所能恢复到第2步;这可能会比试图阻止Android保存这个状态更容易。