本书第18章介绍过,应用具有状态周期,如果应用进入后台运行状态,同时设备内存过低,系统就可能终止该应用,并释放应用所占用的内存。为了保证流畅的用户体验,应该在用户离开应用时保存状态,即使应用被系统终止,仍然要让用户产生应用没有关闭过的感觉。
为了保存和恢复应用状态,必须为应用启用状态恢复(state restoration)。状态恢复的工作原理与归档类似,当应用进入后台运行时,系统会保存应用的视图控制器层次结构。当应用被系统终止后,系统会在用户下一次启动应用时恢复层次结构中的所有视图控制器。(如果系统没有终止应用,那么应用仍然处于内存中,不需要恢复状态。)
本章将为Homepwner应用启用状态恢复。首先演示如果没有启用状态恢复,Homepwner会有哪些问题。
打开Homepwner.xcodeproj,构建并运行应用。创建一个新的BNRItem对象,然后进入其详细界面(BNRDetailViewController)。下面要模拟系统终止应用,并触发状态恢复的过程。在iOS模拟器中,点击Home键(键盘快捷键是Command-Shift-H),让应用进入后台运行。现在模拟系统关闭应用的过程——回到Xcode,点击Stop按钮(Command-.),再重新运行应用。
当应用再次启动时,屏幕会短暂地显示BNRDetailViewController,然后立即切换到BNRItemsViewController。这是由于当应用进入后台运行时,系统会生成当前界面的快照(snapshot)。当应用再次启动时,系统会将之前的快照作为应用的启动图片,直到应用启动成功后,系统才会移除快照。
如果应用没有实现状态恢复功能,用户会短暂地看见应用之前的状态,然后立即恢复到初始状态。因此,有必要为Homepwner添加状态恢复功能,提升用户体验。