Architecture Components
Lifecycle
Lifecycle提供了类和接口让您可以构建出具有感知生命周期变化的组件,这些组件可以根据Activity和Fragment当前的生命周期自动调整自己的状态。
ViewModel
它是被设计用来储存和管理与UI相关数据的组件,以便数据能够在屏幕旋转等配置变化下保存下来。它不应该访问您的视图结构或保留Activity或Fragment的引用。
它有以下职责:
主要职责就是管理UI的数据
它处理Activity/ Fragment和应用程序的其他部分之间的通信
在配置更改时保存数据
这意味着我们的Activity或Fragment不会负责保存数据,只包含与UI相关的代码。
ViewModel是具有生命感知的,所以不需要担心内存泄露问题
LiveData
LiveData是一个保存值(数据持有者)并允许观察值变化的组件。它被设计用来保存ViewModel中的值,但它也可被用于在应用程序中共享数据。LiveData也能感知生命周期的变化,它能在Activity还存在时候接受数据的改变并在不存在时防止崩溃。
LiveData的优点:
始终保持最新的数据
正确的应对配置变化
没有内存泄漏
Lifecycle — ViewModel — LiveData
Room
Room提供了一个SQLite的抽象层,可以在充分利用SQLite的同时流畅访问的数据库。
简而言之,它就像SQLite数据库的一个ORM,它意味着你可以直接将对象保存到数据库中,并且Room会很好地将对象正确保存到数据库中。
Room的优点:
原始的SQL查询
消除了在SQL查询和Java数据对象之间转换的样板代码
不需要写Cursor或Loader