Android livedata 源码解剖

github sample 地址: ArchiteComponentsSample

程序员徐公,一位不羁的码农。

  1. 公众号程序员徐公回复黑马,获取 Android 学习视频

  2. 公众号程序员徐公回复徐公666,获取简历模板,教你如何优化简历,走进大厂

  3. 公众号程序员徐公回复面试,可以获得面试常见算法,剑指 offer 题解

  4. 公众号程序员徐公回复马士兵,可以获得 java 马士兵学习视频一份

在这里插入图片描述


前言


在前面三篇博客中,我们已经介绍了 lifecycle 的使用及原理,livedata ,ViewModel 的常用用法,今天,让我们一起来学习 livedata 的原理。

我们先来回顾一下 LiveData 的特点:

LiveData 是一个可以被观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。

  1. 它可以做到在组件处于激活状态的时候才会回调相应的方法,从而刷新相应的 UI。

  2. 不用担心发生内存泄漏

  3. 当 config 导致 activity 重新创建的时候,不需要手动取处理数据的储存和恢复。内部已经帮我们封装好了。

  4. 当 Actiivty 不是处于激活状态的时候,如果你想 livedata setValue 之后立即回调 obsever 的 onChange 方法,而不是等到 Activity 处于激活状态的时候才回调 obsever 的 onChange 方法,你可以使用 observeForever 方法,但是你必须在 onDestroy 的时候 removeObserver

下面,让我们一步步解剖它


原理分析


我们知道 livedata 的使用很简单,它是采用观察者模式实现的

  1. 添加观察者

  2. 在数据改变的时候设置 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);

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值