首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Jetpack架构组件(四)之LiveData

一、 LiveData简介 LiveData是Jetpack架构组件Lifecycle 库的一部分,是一个可感知生命周期的可观察容器类 (Observable)。...通常,我们可以在UI控制器类中创建该Observer对象,如Activity或Fragment。 通过使用observe()方法将上述的LiveData对象和Observer对象关联在一起。...从上述步骤可以看出,LiveData使用了观察者模式,观察者通常是UI控制器,如Activity或Fragment,而被观察者则是LiveData包谷的数据对象, 当LiveData对象持有数据发生变化...3.2 LiveData使用示例 3.2.1 创建 LiveData 对象 LiveData是一种可用于任何数据的封装容器,其中包括可实现 Collections 的对象,如 List。...() 使用Transformations.switchMap()方法同样可以改变LiveData下游的结果,但传递给switchMap()函数的必须是一个LiveData对象,如下所示。

3.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    构建流式应用:RxJS 详解

    console.log('发起请求..'); },250) }) 已无用的请求仍然执行的解决方式,可以在发起请求前声明一个当前搜索的状态变量,后台将搜索的内容及结果一起返回...RxJS 是基于观察者模式和迭代器模式以函数式编程思维来实现的。 观察者模式 观察者模式在 Web 中最常见的应该是 DOM 事件的监听和触发。...Iterable Protocol 不是具体的变量类型,而是一种可实现协议。...JavaScript 中像 Array、Set 等都属于内置的可迭代类型,可以通过 iterator 方法来获取一个迭代对象,调用迭代对象的 next 方法将获取一个元素对象,如下示例。...Rx.Observable.prototype.switchMap() 使用 switchMap 替换 mergeMap,将能取消上一个已无用的请求,只保留最后的请求结果流,这样就确保处理展示的是最后的搜索的结果

    7.4K31

    Android Jetpack - LiveData

    例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新的可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...LiveData 对象连接到系统服务一次,然后任何需要该资源的观察者都可以只观看 LiveData 对象 使用 LiveData 使用 LiveData 的常规步骤如下,我们按照下面这些步骤写一个简单的例子...在数据变动时及时通知 Observer,这一步通常在 UI 控制器中完成 注意:你可以使用 observeForever(Observer) 方法注册没有关联 LifecycleOwner 对象的观察者...与 Room 一起使用 LiveData Room 持久化库支持可观察查询并返回 LiveData 对象,这些查询一般在 DAO 中编写 在更新数据库时,Room 会生成更新 LiveData 对象所需的所有代码...传递给 switchMap() 的函数必须返回一个 LiveData 对象,如以下示例所示: private fun getUser(id: String): LiveData { ..

    2K30

    AndroidJetpack Livedata应用场景分析

    LiveData 只会将更新通知给活跃的观察者。为观察 LiveData 对象而注册的非活跃观察者不会收到更改通知。 您可以注册与实现 LifecycleOwner 接口的对象配对的观察者。...有了这种关系,当相应的 Lifecycle 对象的状态变为 DESTROYED 时,便可移除此观察者。...这对于 Activity 和 Fragment 特别有用,因为它们可以放心地观察 LiveData 对象,而不必担心泄露 LiveData 优势 数据符合页面状态 不会发生内存泄露 不会因 activity...停止而导致崩溃 不再需要手动处理生命周期 数据始终保持最新状态 可以用来做资源共享 Livedata 使用 一般来说我们会在 ViewModel 中创建 Livedata 对象,然后再 Activity...Livedata 和协程联合使用 emit 方式使用 引入依赖 有时候你可能需要处理异步任务,任务处理完成后刷新 ui 这种情况可以使用 Livedata 的扩展程序实现 本例我们实现下面的逻辑: 在

    1.1K20

    Angular进阶教程2-

    依赖注入的使用 创建可注入服务: import { Injectable } from '@angular/core'; // @Injectable()装饰器,是告诉Angular这是一个可供注入的服务...这取决于想让注入的依赖服务具有全局性还是局部性 依赖对象的创建方式有四种(仅了解): useClass: 基于标识来指定依赖项 useValue: 依赖对象不一定是类,也可以是常量、字符串、...因此我们还需要在服务类中导入RxJS 可观察对象\color{#0abb3c}{可观察对象}可观察对象和可能会使用到的操作符\color{#0abb3c}{操作符}操作符。...Observer(了解) 它是观察者,数据使用者,数据消费者\color{#0abb3c}{观察者,数据使用者,数据消费者}观察者,数据使用者,数据消费者。...常见的运算符包含 map, filter, concat, flatmap, switchmap, forkjoin 在这里我们只调挑出forkJoin和switchMap来讲解一下,其他的操作符可以自己去查阅

    4.2K30

    Android Jetpack系列 之LiveData

    程序达到了我们预期的结果,但是我们这里知道,对于学生这个属性来说,学号和姓名是不可变的,只有分数是可变的,所以这个时候我们可以使用map函数只对分数进行观察,改写ViewModel中的代码如下所示: public...,所以我们无法监听到数据的变化,那么我们该如何做呢,这个时候switchMap就派上用场了 我们在ViewModel 中定义 检测分数变化的LiveData对象 private MutableLiveData...switchMap将信息转化为可观察的LiveData对象: private LiveData studentLiveData = Transformations.switchMap(...在实际项目开发中我们使用switchMap的频率还是很高的,毕竟 只要LiveData对象是调用其他方法获取的 ,我们就可以这样做, 在点击事件中我们设置了可观察数据:分数,当分数改变的时候,就会执行switchMap...函数 ,switchMap会将获取的数据转换为可观察的LiveData,所以我们监听这个LiveData对象 就可以观察到数据的变化了。

    1.1K20

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

    LiveData对象一旦连接到系统服务,任何需要该资源的Observer都只需观察这个LiveData对象。 如何使用LiveData? 1.创建一个LiveData的实例来保存特定类型的数据。...确保Activity或Fragment一旦变为活动状态时,就有可展示的数据。 当应用程序组件处于STARTED状态,它就需从它所观察的LiveData对象中接收到最新的值。...这样做表示此Observer绑定了Lifecycle对象的生命周期,即: 1.如果Lifecycle对象不处于活动状态,则即使值发生更改,也不会调用Observer。...传递给switchMap()的函数必须返回一个LiveData对象,如下例所示: private LiveData getUser(String id) { ...; } LiveData... userId = ...; LiveData user = Transformations.switchMap(userId, id -> getUser(id) ); 您可以使用转换方法在

    2.4K30

    Jetpack之LiveData详解

    大多结合具有生命周期的组件一起使用(如 Activity、Fragment 或 Service,或实现了 LifecycleOwner 接口的对象)。...依赖包引入进来了,接下来看看怎么快速使用 LiveData 创建一个 MutableLiveData 对象,它是 LiveData 的子类,然后给它添加观察者对象,代码如下: java: final...的使用 前面 Hello LiveData 简单展示了 LiveData 的使用 LiveData 除了依赖生命周期对象实现观察者的自动管理外,还可以添加忽略生命周期的观察者, 使用 observeForever...变换操作 Transformations 上面介绍了 LiveData 的基础使用,我们还可以使用 Transformations 对 LiveData 进行变换操作,它提供了两个操作符 map 和 switchMap...LiveData 结合 ViewModel 使用 前面介绍 LiveData 的使用时都是直接在Activity里使用的,但是真实开发场景中我们一般不直接在 Activity / Fragment 中使用而是在

    1.7K20

    Java 设计模式最佳实践:六、让我们开始反应式吧

    RxJava 简介 安装 RxJava 可观察对象、可流动对象、观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...这不能与可伸缩性混淆。弹性系统需要根据需要上下伸缩——见这个页面。 消息驱动:依赖异步消息传递,确保松耦合、隔离、位置透明和容错。 需求是真实的。如今,无响应系统被认为是有缺陷的,用户将避免使用。...在下面的部分中,我们将学习它的功能以及如何使用它。 可观察对象、可流动对象、观察者和订阅者 在 ReactiveX 中,观察者订阅一个可观察的对象。...它们被称为“可连接的”可观察对象,RxJava 拥有能够创建此类可观察对象的操作符。 RxJava2.0 引入了一种新的可观察类型,称为Flowable。...分组运算符 groupBy用于将一个可观察对象划分为一组可观察对象,每个可观察对象发出一组不同的项目。下面的代码按起始字母对字符串进行分组,然后打印键和特定键的组数据。

    1.8K20

    LiveData beyond the ViewModel

    LiveData) 这种模式的优点是,由于所有的东西都是连在一起的,所以当数据发生变化时,用户界面会自动更新。...然而,如果上面的User数据是可以改变的,那么你需要使用switchMap。...One-to-one dynamic transformation — switchMap 考虑一下这个例子:你正在观察一个暴露了User的用户管理器,你需要获取他们的ID,然后才能对存储库进行观察。...(userID) } } switchMap内部使用的也是MediatorLiveData,所以熟悉它很重要,隐藏,当你想结合多个LiveData的来源时,你需要使用它。...另一个选择是使用令牌上传器的observeForever(),并以某种方式钩住用户管理器的生命周期,在完成后删除订阅。 然而,你不需要让所有的东西都能被观察到。

    1.5K30

    RxJS & React-Observables 硬核入门指南

    Actions可观察对象action将发出所有使用store.dispatch()分派的actions。可观察状态state将触发根reducer返回的所有新状态对象。...Actions可观察对象action将发出所有使用store.dispatch()分派的actions。可观察状态state将触发根reducer返回的所有新状态对象。...在Epic内部,我们可以使用任何RxJS的可观察模式,这就是为什么redux-observable很有用。 例如:我们可以使用.filter操作符创建一个新的中间可观察对象。...但我不讨厌redux- tank,我喜欢它,我每天都在使用它! 练习1:调用API 用例:调用API来获取文章的注释。当API调用正在进行时显示加载器,并处理API错误。...我坚信使用正确的库集将帮助我们开发更干净和可维护的应用程序,并且从长远来看,使用它们的好处将超过缺点。

    6.9K50

    ✨从异步讲起,时间,时间,请给函数以答案!

    探秘 JS 异步 JavaScript 除了“闭包”这个最经典的设计之外,还有它是“单线程”的设计,一样可奉为最经典!...— 使用前一个结果的 id 调用 callApiFooC,并返回一个新的 Observable,新 Observable 是 callApiFooC( resIds ) 的返回结果; switchMap...在异步解决方案中,我们也尽量将对异步操作的先后关系确定清楚,谁和谁一起执行、谁先执行谁后执行、谁等待谁的结果,这些也是在调用过程中有很多操作的地方,与声明隔开。...对应代码上的,就涉及几个基础概念: Observable(可观察对象) :就是点击事件流。 Observers(观察者) :就是捕获值/错误/事件结束的方法(其实就是回调函数集合)。...可预见性?又该从何而得? 时间,时间,请给函数以答案? 。。。。。。 相信你认真看完本篇会有一点想法和答案~~

    1.1K20

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

    这样做表示该观察者应该绑定到 Lifecycle,意思是: 如果 Lifecycle 不处于活动状态(STARTED 或 RESUMED),即使该值发生变化也不会调用观察者。...LiveData 有以下优点: 没有内存泄漏:因为 Observer 被绑定到它们自己的 Lifecycle 对象上,所以,当它们的 Lifecycle 被销毁时,它们能自动的被清理。...;LiveData user = Transformations.switchMap(userId, id -> getUser(id) ); 使用这些转换允许在整个调用链中携带观察者的 Lifecycle...此外,如果 UI 被重新创建,它将会触发新的 repository.getPostCode() 调用,而不是使用之前的调用结果。 不能使用那种方式,而应该实现将地址输入转换为邮政编码信息。...addressInput = new MutableLiveData(); public final LiveData postalCode = Transformations.switchMap

    1.1K30
    领券