通过模型驱动界面
一个重要原则是您应该通过模型驱动界面(最好是持久性模型)。模型是负责处理应用数据的组件。它们独立于应用中的 Views 和应用组件,因此不受应用的生命周期以及相关的关注点的影响。
Android 架构中主要的类或组件是界面控制器 (activity/fragment)、ViewModel、LiveData 和 Room。这些组件负责处理生命周期的某些复杂情况,并帮助您避免与生命周期相关的问题。
下图所示为架构的基本组成部分:
界面控制器 (activity/fragment)
activity 和 fragment 是界面控制器。界面控制器通过在屏幕上绘制视图、捕获用户事件以及与用户与之互动的界面相关的所有其他操作来控制界面。应用中的数据或有关该数据的任何决策逻辑都不应放到界面控制器类中。
Android 系统可能会根据某些用户互动情况或因内存不足等系统条件而随时销毁界面控制器。由于这些事件不受您的控制,因此您不应将任何应用数据或状态存储到界面控制器中,而应将有关数据的决策逻辑添加到 ViewModel 中。
ViewModel
ViewModel 是视图中显示的应用数据的模型。模型是负责处理应用数据的组件,能够让应用遵循架构原则,通过模型驱动界面。
ViewModel 存储应用相关的数据,这些数据不会在 Android 框架销毁并重新创建 activity 或 fragment 时销毁。在配置更改期间会自动保留 ViewModel 对象(不会像销毁 activity 或 fragment 实例一样将其销毁),以便它们存储的数据立即可供下一个 activity 或 fragment 实例使用。
如需在应用中实现 ViewModel,请扩展架构组件库中提供的 ViewModel 类,并将应用数据存储在该类中。
总结:
| fragment/activity(界面控制器)的责任 | ViewModel 的责任 |
|---|---|
| activity 和 fragment 负责将视图和数据绘制到屏幕上并响应用户事件。 | ViewModel 负责存储和处理界面需要的所有数据。它绝不应访问视图层次结构(例如视图绑定对象)或存储对 activity 或 fragment 的引用。 |