发生了什么:
Settings > Applications > Manage Applications > Running
,在缓存的背景应用列表中找到我的应用,然后停止它。 [注意:这些步骤只是我强迫测试人员看到的相同症状的方式 - 他们只是正常进出应用程序,而不是强行关闭。]
它在我离开它的活动中打开,但处于不良状态。第一个问题是持有用户信息的内存消失了(如果应用程序被杀死则有意义)。我解决了这个问题,方法是将User类序列化并将当前用户对象存储在onSaveInstanceState
中,然后将其加载到onCreate
中。同样,我不得不重新创建我的ClientConnectionManager
以使网络重新开始工作。
“重新加载”活动运行得很好,我可以导航到并使用新创建的活动,但是如果我按下后退按钮返回到我强行停止之前创建的活动应用程序,我得到一个异常,说User类不存在(ClassNotFoundException,显然是在执行一个unparcel时)。
为什么会这样?应用程序被杀死时处理案例的正确方法是什么,但仍然知道在重新打开时要返回哪个活动?应用程序未运行但未完全关闭的状态名称是什么?
答案 0 :(得分:4)
Activity
或任何其他“安全”Activity
(android:excludeFromRecents
)Intent
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
来识别“从历史记录中启动”案例
醇>
答案 1 :(得分:4)
当应用程序终止时(由操作系统或用户强制执行),将清除完整的活动堆栈。因此后备堆栈中没有活动,当您重新启动它时,前台中的活动是后堆栈中的唯一活动。因此,您无法从堆栈顶部返回。也可能发生后备栈被清除,只留下Tasks and Back Stack
中提到的根活动如果用户长时间离开任务,系统将清除除根活动之外的所有活动的任务。当用户再次返回任务时,仅恢复根活动。系统以这种方式运行,因为在很长一段时间之后,用户可能已经放弃了之前正在做的事情,并且正在返回任务以开始新事物。
答案 2 :(得分:1)
解决方案是让我的User类实现Parcelable
。由于我不理解的原因,我可以在保存实例状态时将我的用户放在Bundle
中作为Serializable
对象,并在最后一次可见活动恢复时成功将其拉出,但是当后台重新启动它无法处理该捆绑中的那个对象。
现在我的应用程序在后台被杀死了。我赞成@avimak和@Rajesh,因为这两个答案都教会了我很多。感谢。