理解应用的生命周期是实现运行良好的应用的关键,而且也是理解应用不能良好运行的关键。性能不足、过渡使用资源及不可预期的用户界面行为都可以通过观察应用的生命周期来诊断。只是查看代码或Activity类的文档页面不容易理解生命周期。为了使你能够观察到应用的生命周期,我们将在Android生命周期方法的实现中加入日志调用,运行程序,并观察在运行的程序中生命周期是如何工作的。在使用该框架时,可以在应用中添加这些日志调用,因为应用往往都需要日志来诊断问题。
在生命周期变化中调用的大多数方法都是基于组件实现的,有的是基于进程实现的。每个组件类型,如Service、BroadcastReceiver、ContentProvider和Activity,都包含自己的生命周期。除了Activity外,其他组件的生命周期已经在第3章中说明过了。大多数组件的生命周期和Activity的生命周期类似。这是因为Activity类和用户交互,而当在用户界面上Activity不再可见时,和该Activity实例关联的资源所占用的内存可能已经被清理。管理组件相关的资源所占用的内存是组件生命周期的主要目的之一。
Activity生命周期和用户体验
实际上,如果总体而言,在移动环境下设计良好的应用,则在其生命周期管理中就需要较少的代码:
·如果Activity使用的数据总是最新的,而且是保存在数据库中的,就不需要显式把这些数据保存在代码中。
·如果用户界面状态很少,就不需要在活动生命周期中保存任何状态。
这些约束看似很严格,但是在移动设备及其他家电设备中,它们就不算严格了。手机可能随时没电,应用在内存中保存的数据模型和状态越少,当设备意外关闭时,丢失的就越少。手机用户可能会被电话打扰,用户没有机会回到之前的应用中来保存数据。移动应用的工作方式和传统的个人电脑上的应用不同。在个人电脑上,文件系统中保存的文件被载入内存之后,必须显式保存,否则数据就丢失了。
在本章以及下一章,你会看到应用的生命周期、数据模型、应用架构的其他方面以及用户体验是相互交织的,而最小阻力路径及在生命周期方法中的实现尽量简单,都带来了健壮、易用、符合Android环境及运行良好的应用实现。如果以用户不再使用活动或系统要杀死活动来收回内存和其他系统资源的方式来处理电源故障,你会简化实现,这会给用户带来良好的体验。在移动用户体验及实现运行良好的应用中,应该避免如“保存”和“取消”这样显式的操作。