3

发生了什么:

  1. 我打开我的应用程序,然后按主页按钮离开它片刻。
  2. 我进入Settings > Applications > Manage Applications > Running,在缓存的后台应用程序列表中找到我的应用程序,然后停止它。
  3. 然后我按住主页按钮并在最近的应用程序列表中选择我的应用程序,再次运行它。

[注意:这些步骤只是我强制测试人员看到的相同症状的方式——他们只是正常进出应用程序,而不是强制关闭。]

它在我离开它的活动中打开,但状态不佳。第一个问题是保存用户信息的内存已经消失(如果应用程序被杀死,这很有意义)。我通过使 User 类可序列化并将当前用户对象存储onSaveInstanceStateonCreate. 同样,我必须重新创建我ClientConnectionManager的网络才能再次工作。

“重新加载”的活动运行得很好,我可以导航到并使用新创建的活动,但如果我改为点击后退按钮以返回在我强制停止应用程序之前创建的活动,我会收到一个异常说用户类不存在(ClassNotFoundException,显然是在进行拆包时)。

为什么会这样?当应用程序被杀死但仍然知道重新打开时要返回哪个活动时,处理这种情况的正确方法是什么?应用程序未运行但未完全关闭的这种状态的名称是什么?

4

3 回答 3

4
  1. 您可以指定哪些活动将出现在“最近的应用程序”中,并确保仅包括主要Activity或任何其他“安全” Activityandroid:excludeFromRecents
  2. FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY您可以通过在您的启动中查找来识别“从历史中启动”案例Intent
于 2012-05-11T05:56:29.977 回答
4

当应用程序终止时(由操作系统或用户强制终止),完整的活动堆栈将被清除。所以后栈中没有活动,当你重新启动它时,前台的活动是后栈中唯一的活动。所以你不能从栈顶返回。也可能发生后退堆栈被清除,只留下任务和后退堆栈中提到的根活动

如果用户长时间离开一个任务,系统会清除该任务除根Activity之外的所有Activity。当用户再次返回任务时,仅恢复根活动。系统的行为方式是这样的,因为在很长一段时间后,用户可能已经放弃了他们之前正在做的事情,并且正在返回任务开始新的事情。

于 2012-05-11T05:57:31.700 回答
1

解决方案是让我的 User 类实现Parcelable。由于我不明白的原因,我可以在保存实例状态时将我的用户Bundle作为Serializable对象放入,并在恢复最后一个可见活动时成功将其拉出,但是当后台堆栈中的活动重新启动时它无法处理该捆绑包中的该对象。

现在我的应用程序从后台被杀中恢复。我赞成@avimak 和@Rajesh,因为这两个答案都教会了我很多东西。谢谢。

于 2012-05-12T02:17:58.577 回答