首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Android  JetPack~ LiveData (一)   介绍与使用

setValuepostValue支持外部使用(public修饰) 普通类,可以直接new 3、LiveData与MutableLiveData区别 LiveData在实体类里可以通知指定某个字段的数据更新...你可以在你需要被观察的数据里添加. 小注意点:如果不使用postValue(this)会怎么样?...super.setValue(value); } } 可以看到在MutableLiveData包裹的有setValue,postValue方法 当然我们也可以让它不对外暴露setValue,...setValue()   setValue()的特性如下:   1.此方法只能在主线程里调用 getValue()   返回当前值。 注意,在后台线程上调用此方法并不能保证将接收到最新的值。...总结: LiveData一般使用在实体类,MutableLiveData作用在变量上,他们通常和ViewModel结合使用,上面例子过于简单,工作当中可按照业务需要进行调整。

1.5K20

“终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!

当走到onStart()变为活跃时,onChanged被调用,value被onStart()中setValue的value覆盖,所以打印的是onChanged: onStart。...再点开时,走到onStart()变为活跃时,onChanged被调用,value被onStart()中setValue的value覆盖,所以打印的是onChanged: onStart。...然后对添加的结果进行判断,如果mObservers中已经存在此observer key,value中的owner不是传进来的owner,就会报错“不能添加同一个observer却是不同LifecycleOwner...3.3 数据更新 LivaData数据更新可以使用setValue(value)、postValue(value),区别在于postValue(value)用于 子线程: //LivaData.java...到这里观察者模式完整的实现逻辑就梳理清晰了:LivaData通过observe()添加 与LifecycleOwner绑定的观察者;观察者变为活跃时回调最新的数据;使用setValue()、postValue

3.9K30

事件总线方案实践

发布: 发布者通过 getChannel() 获取消息通道,然后调用 setValue() 或者 postValue() 发布消息。...() 另一个是 postValue(),这两个方法的区别是,postValue() 在内部会抛到主线程去执行更新数据,因此适合在子线程中使用;而 setValue() 则是直接更新数据。...能不能从Map容器mObservers中取到LifecycleBoundObserver,然后再更改version呢?...的bug 9.1 模拟通过发送多个postValue消息出现丢失问题 首先看看MutableLiveData源代码,如下所示,这里重点展示测试数据案例public void postValue(T value...### 10.如何发送延迟事件消息 - 可以知道,通过postValue可以在子线程发送消息,那么发送延迟消息也十分简单,代码如下所示:/\*\* \* 子线程发送事件 \* @param value

1.8K30

Android技术栈(四)Android Jetpack MVVM 完全实践

这就意味这你所有的kotlin代码都不能依赖注解处理器来为你的代码提供附加功能,但是你可以把这些代码换成等价的Java实现,它们可以工作得很好. 2.2 DataBinding的兼容性 先说一点,DataBinding...super.postValue(value); } @Override public void setValue(T value) { super.setValue...(value); } } 分别是postValuesetValue,其中setValue内部检查线程是否为主线程,不允许在子线程中使用,用了就报错.postValue会将值通过主线程的Handler...这样我们就可以在这个事件流上对事件做手脚了,并且这样还能兼容RxBinding所不能兼容的第三方自定义View....事件总线 RxJava事件流 设计原则: Jetpack中实现的LiveData能够很好的作为数据持有者,并且是生命周期感知的,但是有些时候我们需要向View层发送一些单次的数据,这时LiveData并不能够很好地工作

3.8K01

由浅入深,详解 LiveData 的那些事

在开始之前,我们先看一段普通的示例代码,如下所示: private val _livedata: MutableLiveData = MutableLiveData() val liveData...: LiveData = _livedata fun manager(){ _livedata.postValue(x) _livedata.setValue(x) } fun...,从而避免非活跃观察者被通知到,节省性能;以及能不能将解绑逻辑让框架自行执行,从而免除调用者手动调用模版代码;自然而然,我们就会想到 Lifecycle ,所以我们可以在 observe() 这里做改动...---- postValue() 用于在非主线程更新 LiveData 中持有的数据,内部最终会调用 setValue() ,具体如下: protected void postValue(T value...当然需要注意的是,Flow 并不能感知 Android 的生命周期,你可能需要再增加一些模版代码,好在Android团队做了各种扩展方法,这个成本在今天也是非常小。

1.3K20

LiveData详细分析

首先创建一个 MutableLiveData(LiveData是抽象类)对象 ,通过 observe 方法可以订阅修改数据的通知,通过 postValue()或者 setValue() 方法发送事件更新数据...LiveData并没有提供这样的功能,但是Architecture Component提供了MutableLiveData这样一个类,可以通过setValue(T)和postValue(T)方法来修改存储在...MutableLiveData是LiveData的一个子类,从名称上也能看出这个类的作用。 调用setValue()方法就可以把LiveData中的值改为 "小杨真的是一个逗比么" 。...那么setValue()和postValue()有什么不同呢?区别就是setValue()只能在主线程中调用,而postValue()可以在子线程中调用。...发送源码分析 8.1 setValue源码分析 LiveData 更新数据方式有两个,一个是 setValue() 另一个是 postValue(),这两个方法的区别是,postValue() 在内部会抛到主线程去执行更新数据

2.8K00
领券