LiveData – 数据监听神器

LiveData我认为是Jetpack构架组件里最有用一个。

以前做项目的时候,不同页面里会经常显示一些通用信息,比如当前登录用户的用户名和头像等。这些信息都保存在数据层,你的UI如果想及时响应数据的变化,那么必须想办法去监听数据的变化。假设你的N个页面都有显示头像,那么用户进入你的App的设置页面,更改了头像,然后显示了头像的这些页面是不是得及时改变?

我以前是这么做的。使用EventBus,在各个需要显示头像的Activity里注册事件,用户改完了头像,发送一个事件,然后各个页面自己去更新。

LiveData提供了一个简洁优雅的方式来完成这种通用需求。我们可以给LiveData注册观察者,一旦数据变化,就可以响应。配合LifeCycle使用,可以获取当前Activity的LifeCycle,当LifeCycle到达DESTROYED状态的时候,把观察者给删除。也即是说,你在Activity的onCreate开始监听数据之后,就不用操心再在onDestroy去写代码了,取消监听是自动的,你省事儿了。

(更多…)

继续阅读 →

ViewModel能替代onSaveInstanceState么?

ViewModel出现之前,处理横竖屏的最佳实践就是使用Activity的onSaveInstanceState()来保存Activity销毁之前的数据,在onCreate()或者onRestoreInstanceState()的时候取出数据。有了ViewModel之后,你可能会思考,这两种方式都有啥区别,是不是只用ViewModel就行了?

仁者见仁智者见智。这两种方式还是稍稍有些不一样的,我们简单做个回顾:

(更多…)

继续阅读 →