github sample 地址: ArchiteComponentsSample
程序员徐公,一位不羁的码农。
-
公众号程序员徐公回复黑马,获取 Android 学习视频
-
公众号程序员徐公回复徐公666,获取简历模板,教你如何优化简历,走进大厂
-
公众号程序员徐公回复面试,可以获得面试常见算法,剑指 offer 题解
-
公众号程序员徐公回复马士兵,可以获得 java 马士兵学习视频一份
在前面三篇博客中,我们已经介绍了 lifecycle 的使用及原理,livedata ,ViewModel 的常用用法,今天,让我们一起来学习 livedata 的原理。
我们先来回顾一下 LiveData 的特点:
LiveData 是一个可以被观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。
-
它可以做到在组件处于激活状态的时候才会回调相应的方法,从而刷新相应的 UI。
-
不用担心发生内存泄漏
-
当 config 导致 activity 重新创建的时候,不需要手动取处理数据的储存和恢复。内部已经帮我们封装好了。
-
当 Actiivty 不是处于激活状态的时候,如果你想 livedata setValue 之后立即回调 obsever 的 onChange 方法,而不是等到 Activity 处于激活状态的时候才回调 obsever 的 onChange 方法,你可以使用 observeForever 方法,但是你必须在 onDestroy 的时候 removeObserver
下面,让我们一步步解剖它
我们知道 livedata 的使用很简单,它是采用观察者模式实现的
-
添加观察者
-
在数据改变的时候设置 value,这样会回调 Observer 的 onChanged 方法
MutableLiveData nameEvent = mTestViewModel.getNameEvent();
nameEvent.observe(this, new Observer() {
@Override
public void onChanged(@Nullable String s) {
Log.i(TAG, "onChanged: s = " + s);
mTvName.setText(s);
}
});