首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Android面试

    细说Jetpack中那些LiveData们

    (下一章节介绍MediatorLiveData) 1.1)block代码块中的代码执行时机会执行多次吗? 注释11处,如果当代码块执行之前,是否有取消任务,如果有会把这取消任务给终止掉 多面手MediatorLiveData image.png 2.1) 用MediatorLiveData监听其他LiveData MediatorLiveData # addSource(LiveData source, Observer<? super S> onChanged) 当sourceLiveData数据有变化后,onChanged这个Observer会的onChange方法会被回调,我们可以在这个回调里选择向MediatorLiveData CoroutinLiveData出场自带所宿主的ViewModel MediatorLiveData能同时监听多个LiveData的数据变化。

    80120编辑于 2021-12-17
  • 来自专栏Android群英传

    一篇掌握LiveData transformations

    所有这些都是使用MediatorLiveData类编写的。 为了解决这个问题,我应该使用MediatorLiveData来合并Player和Game,如果他们中的任何一个被更新。这将看起来像这样。 MediatorLiveData MediatorLiveData可以转换、过滤和合并其他LiveData实例。每当我创建MediatorLiveData时,我倾向于遵循同样的模式,它看起来像这样。 有时你实际上想更新你的MediatorLiveData,即使一个或多个来源目前是空的,但这是一个很好的方法,在从MediatorLiveData发出新值之前,确保局部变量aVal和bVal不是空的。 你甚至可以在这里应用更多的验证/过滤,以减少你所创建的最终MediatorLiveData的排放。

    2.3K20编辑于 2022-01-27
  • 来自专栏Android群英传

    LiveData beyond the ViewModel

    MediatorLiveData就是LiveData提供的用于组合数据的工具,同时与Transformations类也提供了一些变换工具。 One-to-many dependency — MediatorLiveData MediatorLiveData允许你将一个或多个数据源添加到一个LiveData观察器中。 img 使用MediatorLiveData来组合数据的方法是在不同的方法中添加来源和设置值。 为此使用MediatorLiveData并不理想,因为它要求你在每次需要新数字时都要添加源。 我们不要使用MediatorLiveData,而是尝试(但失败了)用Transformation.map来解决这个问题。

    2K30编辑于 2021-12-08
  • 来自专栏胡飞洋的Android进阶

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

    MediatorLiveData 是 LiveData 的子类,允许合并多个 LiveData 源。 只要任何原始的 LiveData 源对象发生更改,就会触发 MediatorLiveData 对象的观察者。 MediatorLiveData<String> mediatorLiveData = new MediatorLiveData<>(); MutableLiveData<String 如果MediatorLiveData有活跃观察者,就调用plug(): //MediatorLiveData.java private static class Source<V> implements 而在e.plug()前是有判断 MediatorLiveData 确认有活跃观察者的。

    4.6K30发布于 2020-12-15
  • 来自专栏program

    Jetpack组件之LiveData

    MediatorLiveData<String> mediatorLiveData = new MediatorLiveData<>(); mediatorLiveData.addSource(liveData1 Observer<String>() { @Override public void onChanged(String s) { mediatorLiveData.setValue (s); } }); mediatorLiveData.addSource(liveData2, new Observer<String>() { @Override public void onChanged(String s) { mediatorLiveData.setValue(s); } }); mediatorLiveData.observe(this, new Observer<String>() { @Override public

    1.2K30编辑于 2022-06-29
  • 来自专栏loongwind

    Jetpack之LiveData详解

    MediatorLiveData 继承自 MutableLiveData 可以添加多个 LiveData 数据源,可以观察或调度多个 LiveData 数据源。 前面介绍 Transformations 的变换操作实际上就是返回的 MediatorLiveData ,看一下 MediatorLiveData 的使用: java: MutableLiveData <User> userMediatorLiveData = new MediatorLiveData<>(); userMediatorLiveData.addSource(userLiveData1, 有的人可能会有疑问用 MediatorLiveData 有什么用 ? 的 Observer 自定义LiveData 除了使用库里提供的 MutableLiveData 和 MediatorLiveData 外我们还可以根据实际场景继承 LiveData自定义我们自己的

    2.2K20编辑于 2022-09-22
  • 来自专栏Android相关

    AAC---LiveData

    liveData.setValue(new UserData()); liveData.postValue(new UserData()); MutableLiveData与MediatorLiveData MediatorLiveData:多来源的LiveData 它可以对一个数据结构添加多个数据来源,addSource函数添加LiveData类型的数据来源,而后回调给MediatorLiveData达到多路数据源的效果 = new MutableLiveData<>(); networkData.observe(this, userData -> { // TODO: }); MediatorLiveData <String> live1 = new MediatorLiveData<>(); live1.addSource(localCache, userData -> live1.setValue(userData.getUserName

    1.3K20发布于 2018-10-24
  • 来自专栏Android补给站

    Android Architecture Components Part2:LiveData

    .; 5LiveData<User> user = Transformations.switchMap(userId, id -> getUser(id) ); MediatorLiveData 与LiveData 相关的还有一个MediatorLiveData,它的作用是:可以同时监听多个LiveData。 1LiveData<List<User>> usersFromDatabase; 2LiveData<List<User>> usersFromNetwork; 3MediatorLiveData<List <User>> usersLiveData = 4    new MediatorLiveData<>(); 5usersLiveData.addSource(usersFromDatabase, newUserList 7usersLiveData.addSource(usersFromNetwork, newUserList -> 8    usersLiveData.setValue(value)); 一旦其中一个发送变化,MediatorLiveData

    75820发布于 2019-07-16
  • 来自专栏Android干货园

    4. Jetpack源码解析—LiveData的使用及工作原理

    @NonNull LiveData<X> source, @NonNull final Function<X, Y> mapFunction) { final MediatorLiveData <Y> result = new MediatorLiveData<>(); result.addSource(source, new Observer<X>() { result.setValue(mapFunction.apply(x)); } }); return result; } 我们可以看到map的源码是通过MediatorLiveData map()的原理就是基于MediatorLiveDataMediatorLiveData内部会将传递进来的LiveData和Observer封装成内部类,然后放在内部维护的一个Map中。

    1.4K20发布于 2019-07-10
  • 来自专栏Android开发实战

    谷歌官方Android应用架构库——LiveData

    可以使用 MediatorLiveData 实现自己的转换,MediatorLiveData 是为了用来正确的监听其它 LiveData 实例并处理它们发出的事件而特别创建的。 MediatorLiveData 需要特别注意正确的向源 LiveData 传递其处于活动/闲置状态。有关详细信息,请参阅 Transformations 类。

    1.5K30发布于 2018-10-22
  • 来自专栏Android技术分享

    Android程序员该如何去手写事件通信方案LiveDataBus

    是在将hasObservers()替换getObserverCount()方法时将LiveData改成了abstract,在此之前它是被定义为public,可以访问外国网站的可以看下这里的修改记录 MediatorLiveData MediatorLiveData可以看成是多个LiveData的代理,当将多个LiveData添加到MediatorLiveData,任何一个LiveData数据发生变化时,MediatorLiveData

    1.8K10发布于 2019-03-26
  • 来自专栏Android补给站

    LiveData精通指南:解锁其潜力

    合并LiveData 我们可以使用MediatorLiveData类将多个LiveData对象合并为一个LiveData对象。 例如,我们可以将LiveData和LiveData对象合并为LiveData<String, Integer>对象: MediatorLiveData<Pair<String, Integer>> dataLiveData = new MediatorLiveData<>(); dataLiveData.addSource(nameLiveData, s -> { Pair<String, Integer> pair pair = new Pair<>(nameLiveData.getValue(), integer); dataLiveData.setValue(pair); }); 在这个示例中,我们使用MediatorLiveData

    85110编辑于 2023-08-31
  • 来自专栏深入理解Android

    Android从零开始搭建MVVM架构(4)——LiveData

    要实现自己的转换,您可以使用MediatorLiveData类,该类监听其他LiveData对象并处理它们发出的事件。 MediatorLiveData将其状态正确地传播到源LiveData对象。 合并多个LiveData源 MediatorLiveData是LiveData的一个子类,帮助您合并多个LiveData源。 在任何原始LiveData源对象改变后,MediatorLiveData对象的Observer会被触发。    例如,如果在UI中有一个从本地数据库或网络获取更新的LiveData对象,则可以将以下数据源添加到MediatorLiveData对象: 与存储在数据库中的数据关联的LiveData对象。 您的Activity只需观察MediatorLiveData对象即可接收来自两个数据源的更新。

    3.2K30编辑于 2022-06-22
  • 来自专栏悦专栏

    从 Android 开发到读懂源码 第04期:LiveData 源码解析

    LiveData 是一个抽象类,其子类常用的有 MutableLiveData, MediatorLiveData 和 RoomTrackingLiveData 。 数据操作方法 public class MutableLiveData<T> extends LiveData<T> {} // 依赖监听其他或多个 LiveData 的变化 public class MediatorLiveData // 一般情况可以忽略该判断 if (wasInactive && mActive) { onActive();// 回调通知,MediatorLiveData mActive) { onInactive();// 回调通知,MediatorLiveData 中有实现 } // 如果从未激活到激活

    73020编辑于 2022-04-25
  • 来自专栏掘金文章

    使用 Architecture Component 实现 MVVM 的正确姿势

    生命周期销毁的时候,两个 LiveData 的监听关系都会断开,这在 ViewModel 和 Repo 之间也是用 LiveData 通信的场景下,可以有效防止 ViewModel 泄露的问题 一对多的转换 —— MediatorLiveData Transforms 的 map() 和 switchMap() 实际上内部都是用了一个叫 MediatorLiveData 的封装类,使用这个类可以将多个 LiveData 组合起来,实现监听多个 LiveData 变化的功能 image.png 例如上图我们的 Repo 一般都有远程数据和本地缓存,这是一种很常见的场景,这个时候我们可以使用 MediatorLiveData 来监听本地和远程的数据变化 LocalRepo.userData private val remote = RemoteRepo.userData // 共同监听本地和远程数据的变化 private val _result = MediatorLiveData

    1.1K20编辑于 2021-12-09
  • 来自专栏Android技术分享

    Jetpack:在数据变化时如何优雅更新Views数据

    合并多个LiveData 源 MediatorLiveData是LiveData的子类,它主要用途是用来合并多个LiveData源。 当其中一个源数据发生变化是,都会回调订阅MediatorLiveData的观察者的onChanged()方法。例如我们在实际开发中,我们的数据源要么来自服务器,要么来自本地数据库。 这里就考虑使用MediatorLiveData

    3.3K30发布于 2019-07-02
  • 来自专栏Android 开发者

    Android Jetpack: LiveData 和 Lifecycle 介绍 | 中文教学视频

    提供基本数据转换方法,例如 switchMap 和 MediatorLiveData

    1.2K10发布于 2018-10-15
  • 来自专栏用户9239674的专栏

    AndroidJetpack Livedata应用场景分析

    btn_switchmap.setOnClickListener { model.sendData() } 复制代码 合并两个 Livedata(MediatorLiveData MutableLiveData<String>() private val liveData2 = MutableLiveData<Int>() val liveCombind = MediatorLiveData logEE(it)//model中delay 3s后会返回数据到这里 } emitSource 使用 使用 emitSource 的效果等同于 MediatorLiveData

    1.3K20编辑于 2021-11-29
  • 来自专栏程序亦非猿

    【AAC 系列三】深入理解架构组件:LiveData

    MediatorLiveData 用到了 onActive() 跟 onInactive() 有兴趣自行了解,这里不展开) 接下去探索 dispatchingValue 。 4.3 MediatorLiveData LiveData 还有一个子类是 MediatorLiveData,它允许我们合并多个 LiveData,任何一个 LiveData 有更新就会发送通知。 比如我们的数据来源有两个,一个数据库一个网络,这时候我们会有两个 DataSource,也就是两个 LiveData,这个时候我们可以使用 MediatorLiveData 来 merge 这两个 LiveData

    1.2K20发布于 2019-08-16
  • 来自专栏用户4077185的专栏

    Android | LiveData 源码分析

    LiveData var live1 = MutableLiveData<String>() var live2 = MutableLiveData<String>() var mediator = MediatorLiveData String>() mediator.addSource(live1) { } mediator.addSource(live2){} mediator.observe(this){ } 通过 MediatorLiveData 将两个 MutableLiveData 合并到一起,这样当任何一个发生变化,MediatorLiveData 都可以感知到 相关问题 LiveData 发送的数据是粘性的 例如再没有观察者的时候发送数据

    1.5K20编辑于 2022-09-27
领券