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

LiveData精通指南:解锁其潜力

LiveData是一个可观察的数据持有者类,它可以在数据发生变化时通知观察者。...,我们将当前活动作为观察者,并在LiveData对象发生改时更新数据。...s -> s.length()); 在这个示例中,我们使用map()方法将LiveData对象转换为Integer类型,并且LiveData对象发生改时更新数据。...它使用观察者模式来通知观察者数据发生了变化。当LiveData对象被观察时,它会将观察者添加到观察者列表中。当LiveData对象发生变化时,它会通知观察者。...解决方法是活动状态下观察LiveData对象,或使用Lifecycle组件来管理LiveData对象的生命周期。 数据更新不及时:当LiveData对象发生改时观察者没有及时接收到更新。

18810

今天撸一波Jetpack下的Lifecycle、ViewModel和LiveData

LiveData会根据观察者绑定的LifecycleOwner的生命周期情况,来决定是否将数据改变的情况通知观察者。...这时候LiveData会回调onInactive()。这时候就算其持有的数据更新了,也不会发起通知。...同时ViewModel会在configuration 更改时自动保留数据。 ? 官方给的建议是将LiveData和ViewModel配合来使用。...其真正意义在于以下几个方面: ① 职责分离:使Activity/Fragment不用再负责从某些数据源获取数据,只需要负责展示数据就好,同时还消除了配置更改时保留数据对象实例的引用的责任。...④ 容易测试:职责的分离会使测试这些职责容易,而且还可以产生细粒度的测试用例。

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

Android Jetpack - LiveData

生命周期状态更改时LiveData通知 Observer 对象。你可以合并代码以更新这些 Observer 对象中的 UI。...每次应用程序数据更改时,你的观察者都可以每次更改时更新 UI,而不是更新 UI 没有内存泄露 观察者绑定到 Lifecycle 对象,并在其相关生命周期被破坏后自行清理 不会因为活动停止而崩溃 如果观察者的生命周期处于非活动状态...在数据变动时及时通知 Observer,这一步通常在 UI 控制器中完成 注意:你可以使用 observeForever(Observer) 方法注册没有关联 LifecycleOwner 对象的观察者...在这种情况下,观察者被认为始终处于活动状态,因此始终会收到有关修改的通知。...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望LiveData 对象分派给观察者之前更改存储 LiveData 对象中的值,

1.9K30

Android-ViewModel和LiveData使用详解

例如:Activity配置发生改变时(屏幕旋转),Activity就会重新创建,onCreate()方法也会重新调用。...LiveData会将观察者视为活动状态,并通知其数据的变化。LiveData未注册的观察对象以及非活动观察者是不会收到有关更新的通知。...LiveData的优点: 确保UI界面的数据状态 LiveData遵循观察者模式。LiveData在生命周期状态更改时通知Observer对象,更新这些Observer对象中的UI。...观察者可以每次应用程序数据更改时更新UI,而不是每次发生改时更新UI。 没有内存泄漏 当观察者被绑定他们对应的LifeCycle以后,当页面销毁时他们会自动被移除,不会导致内存溢出。...不会因为Activity的不可见导致Crash 当Activity不可见时,即使有数据变化,LiveData也不会通知观察者

3.4K30

Jetpack组件之LiveData

首语 ViewModel 以注重生命周期的方式存储和管理界面相关的数据,当数据发生变化时,可通过接口的方式通知页面,但是有很多数据要通知时,需要定义大量的接口显得十分冗余,为此,Jetpack提供了LiveData...LiveData 是一种可观察的数据存储器类。它是一个数据的容器,将数据包装起来,使数据成为被观察者,当数据发生变化时,观察者能够获得通知。...当数据发生变化时,LiveData通知观察者对象,无需每次应用数据发生变化时更新界面。...= null) { value.setValue(value.getValue() + 1); } } 通常,LiveData仅在数据发生改时才发送更新,并且仅发送给活跃观察者...一种例外情况是,观察者从非活跃状态更改为活跃状态时也会收到更新。此外,如果观察者第二次从非活跃状态更改为活跃状态,则只有自上次变为活跃状态以来值发生了更改时,它才会收到更新。

80430

Android Jetpack架构组件(四)之LiveData

LiveData是一个持有数据的容器类,它持有的数据是可以被观察者订阅的,当数据发生变化时会通知观察者观察者可以是 Activity、Fragment、Service 等对象。...LiveData 具有感知观察者的生命周期能力,并且只有当观察者处于激活状态(STARTED、RESUMED)才会接收到数据更新的通知未激活时会自动解除注册观察者,以降低内存泄漏的风险。...因此,我们认为LiveData就是一个数据容器,它负责将数据包裹起来,使数据成为被观察者,当数据发生变化时,LiveData通知观察者以便观察者做出响应。...并且,LiveData 仅在数据发生改时才发送更新,并且仅发送给活跃观察者,如下所示。...同时,LiveData仅更新处于活跃生命周期状态的应用组件观察者,也即是说LiveData并不会通知所有的观察者,它只会通知处于活跃状态的观察者,那么它是如何做到这一点的呢?

2.7K00

LiveData的优势

当观察的数据发生变化时,LiveData通知 [Observer]对象,实现被动更新,不需要主动去调用viewmodel获取数据。...不会发生内存泄漏 观察者会绑定到 [Lifecycle],可以获取到应用组件的声明周期,当销毁时自动取消订阅。...如果看源码会发现Observe有一个version版本号,而LiveData也有一个版本号是否调用观察者通知数据变化就是比对这两个版本号是否一致,ViewModel会保存LiveData实例,当重建时LiveData...版本号还是之前的版本号,而观察者此时重走OnCreate为0,所以可以收到上一次的数据变化通知 适当的配置更改 如果由于配置更改(如设备旋转)而重新创建了 Activity 或 Fragment...(ViewModel通过OnDestory的时候保存到Configure属性中,当attach的时候取出这个属性里面的Viewodel赋值给组件,当Activity/Fragment重新get获取的时候拿到的就是上次的

1.2K20

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

Livedata 优点 1.保证UI与数据可以同步 Livedata 遵循观察者模式,并且 Livedata 会在生命周期变化的时候通知观察者。...Observer对象订阅了LiveData对象,便会在数据发生变化时发出通知。 您通常需要UI控制器(如Activity或Fragment)中注册Observer对象。...在建立观察者关系之后,可以更新LiveData对象的值,如以下示例所示,当用户点击按钮时向所有观察者发出通知: mButton.setOnClickListener(new OnClickListener...setValue(T)方法更新LiveData实例的值,并通知活动观察者有关更改。...postalCode字段定义为addressInput的转换,这意味着addressInput发生改时,如果有一个活跃的Observer,将调用repository.getPostCode()方法,如果在

2.2K30

开发以太坊安卓钱包系列3 - 资产信息展示

View 与 Model 不直接发生联系, 而是通过ViewModel负责接收View层的事件以及获取并处理数据,ViewModel层的数据变化也会通知给View层进行相应的UI的更新,从而实现业务逻辑和...使用MVVM模式最大的优点就是解耦, 因为数据处理逻辑是独立于View, UI更改时,ViewModel 不用做太多改动。...ViewModel 和 LiveData ViewModel 会关注UI生命周期来存储和管理数据,Activity发生变化(锁屏开屏、旋转)时,ViewModel 会自动保留之前的数据并给新的Activity...LiveData是一个可观察的数据持有者类。观察者可以方便我们以异步的方式获取数据,同时LiveData也是有生命周期感知的。如果其生命周期处于STARTED或RESUMED状态。...LiveData会将观察者视为活动状态,并通知其数据的变化。LiveData未注册的观察对象以及非活动观察者是不会收到有关更新的通知

1.3K30

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

它具有以下特点: 数据可以被观察者订阅; 能够感知组件(Fragment、Activity、Service)的生命周期; 只有组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新...LiveData具有以下优点: 1.能够保证数据和UI统一 这个和LiveData采用了观察者模式有关,LiveData是被观察者,当数据有变化时会通知观察者(UI)。...7.资源共享 通过继承LiveData类,然后将该类定义成单例模式,该类封装监听一些系统属性变化,然后通知LiveData观察者,这个继承LiveData中会看到具体的例子。...四、LiveData主要涉及到的时序有三个: Fragment/Activity中通过LiveData.observer()添加观察者(observer()方法中的第二个参数)。...根据Fragment/Activity生命周期发生变化时,移除观察者或者通知观察者更新数据。 当调用LiveData的setValue()、postValue()方法后,通知观察者更新数据。

1.4K10

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

即 Lifecycle 将生命周期划分为多个状态,当生命周期改变时,就会触发生命周期事件通知(比如 onResume() 等),从而同步当前的状态,而状态相当于一个事件集,其代表了当前 lifecycle...---- 如果我们自己要实现一个 LiveData ,其内部维护着一个数据,并且要保证这个数据更新时,观察者可以收到通知,并且要在页面活跃状态才行。此时,就有如下几个问题: 数据怎么维护?...说的详细点: 2017年,Kotlin 的占有率可没那么高,所以 LiveData 作为 AAC 的重要组件自然承担了大部分责任。...而在2022的今天,Kotlin Android开发中的占有率早已经超过63%(这只是2021年统计),随着日益增加的业务与架构挑战,LiveData 显然不能满足更多需求,架构也需要先进的组件支持...因为不谈的背景的情况下,没有绝对的标准与统一的准则,那就别提对与错。但至少对于 LiveData 而言,了解完本篇的你,我相信再也不会再有相关疑问。

1.3K20

LiveData详细分析

LiveData需要一个观察者对象,一般是Observer类的具体实现。当观察者的生命周期处于STARTED或RESUMED状态时,LiveData通知观察者数据变化。...02.使用LiveData的优势 2.1 具有很明显的优点 UI和实时数据保持一致 因为LiveData采用的是观察者模式,这样一来就可以在数据发生改变时获得通知,更新UI。...不会发生内存泄露 观察者被绑定到组件的生命周期上,当被绑定的组件销毁(onDestroy)时,观察者会立刻自动清理自身的数据。...这个方法是控制LiveData中数据发生变化时,采取什么措施 (比如更新界面)。通常是UI Controller (Activity/Fragment) 中创建这个观察者。...我们的观察者状态变更(inactive->active)的时候, 也会通知到, 这就导致了LiveData必然支持粘性事件。

2.8K00

引入Jetpack架构后,你的App会发生哪些变化?

本文1.1 中 生命周期同步设计就是一个标准的观察者模式,ObserverLifecycle可作为观察者,PlayerActivity作为被观察者,当被观察者(PlayerActivity)生命周期发生改变时会主动通知观察者...(VideoPlayer) 同时观察者不改变代码结构的情况随意扩展,比如PlayerActivity属于一个MVP架构,此时可以将Presenter实现ObserverLifecycle作为观察者 随后...LiveData + Lifecycle 实现 1 + 1 > 2 LiveDataLifecycle的加持下可以实现只可见状态接收通知,说的通俗一点Activity执行了onStop()后内部的LiveData...想要使两个Fragment中播放信息实时同步,最优雅的方式是将播放状态托管Activity作用域下ViewModel的LiveData中,然后各自做状态监听,这样只有要有一方改变就能立即通知到另一方,...Jetpack 只是让 MVVM 简单、安全

1K31

ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

❌ 避免 ViewModel 里持有视图层的引用 推荐使用观察者模式作为 ViewModel 层和 View 层的通信方式,可以使用 LiveData 或者其他库中的 Observable 对象作为被观察者...示例中,我们继承 LiveData 创建一个叫做 SingleLiveEvent 的类来解决这个问题。它仅仅发送发生在订阅后的更新,要注意的是这个类只支持一个观察者。...这只会发生在系统需要资源或用户手动杀死应用程序时,如果数据仓库 ViewModel 中持有对回调的引用,ViewModel 将发生暂时的内存泄漏。 ?...数据仓库中的 LiveData 为了避免泄露 ViewModel 和回调地狱(嵌套的回凋形成的“箭头”代码),可以像这样观察数据仓库: ?...继承 LiveData LiveData 最常见的用例是 ViewModel 中使用 MutableLiveData 并且将它们暴露为 LiveData 来保证观察者不会改变他们。

3K30

引入Jetpack架构后,你的App会发生哪些变化?

LiveData并不是只运用观察者模式 2.1 观察者模式的优点有哪些? 2.2 LiveData基于观察者模式又做了哪些扩展?...本文1.1 中 生命周期同步设计就是一个标准的观察者模式,ObserverLifecycle可作为观察者,PlayerActivity作为被观察者,当被观察者(PlayerActivity)生命周期发生改变时会主动通知观察者...(VideoPlayer) 同时观察者不改变代码结构的情况随意扩展,比如PlayerActivity属于一个MVP架构,此时可以将Presenter实现ObserverLifecycle作为观察者 随后...2.3 LiveData + Lifecycle 实现 1 + 1 > 2 LiveDataLifecycle的加持下可以实现只可见状态接收通知,说的通俗一点Activity执行了onStop()后内部的...LiveData就无法收到通知,这样设计有什么好处?

81900

使用Lifecycle-Aware组件优化项目

包含以下几个组件模块: lifecycle 处理生命周期,创建一个自动响应生命周期事件的用户界面 LiveData 构建底层数据库更改时通知试图的数据对象(数据驱动界面) ViewModel 存储未在应用旋转中销毁的...new MyLifeCycleObserver()); }} 使用ViewMode管理数据 ViewModel是以关联生命周期的方式来存储和管理UI相关的数据的类,即使configuration发生改变...对于列表型这种庞大的数据类型并不适合 Activity或Fragment经常会做一些异步的耗时操作,随之就需要管理这些异步操作得到的数据,并在destroyed的时候清理它们,从而避免内存溢出这类问题的发生...LiveData的优势: 确保数据源跟UI展示一致——当数据源变化时,LiveData通知观察者更新UI,前提是组件激活状态下。...不会造成内存泄露——由于Observer跟LifecycleOwner建立关系,从而可以获取生命周期状态,当组件生命周期状态为DESTROYED时,会移除观察者

89320

LiveData的用法

我们示例代码中定义了接口,当数据发生变化的时候,采用接口的方式实现对页面的通知。...LiveData是一个可被观察的数据容器类,具体来说,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为被观察者,当数据发生变化的时候,观察者能够获得通知。...例如,可以ViewModel中进行数据的获取和加工等操作。因此,ViewModel中的数据可能随着业务的变化而发生变化。...LiveData的作用就是,ViewModel中的数据发生变化的时候通知页面更新。因此,LiveData通常被放在ViewModel中使用,用于包装ViewModel中那些需要被外界观察的数据。...中的数据发生变化时,无论页面处于什么状态,observeForever()方法都可以收到通知

33320

引入Jetpack架构后,你的App会发生哪些变化?

本文1.1 中 生命周期同步设计就是一个标准的观察者模式,ObserverLifecycle可作为观察者,PlayerActivity作为被观察者,当被观察者(PlayerActivity)生命周期发生改变时会主动通知观察者...(VideoPlayer) 同时观察者不改变代码结构的情况随意扩展,比如PlayerActivity属于一个MVP架构,此时可以将Presenter实现ObserverLifecycle作为观察者 随后...2.3 LiveData + Lifecycle 实现 1 + 1 > 2 LiveDataLifecycle的加持下可以实现只可见状态接收通知,说的通俗一点Activity执行了onStop()后内部的...LiveData就无法收到通知,这样设计有什么好处?...Jetpack 只是让 MVVM 简单、安全 视频:Android中高级进阶之MVVM与JetPack: LiveData&lifecycle/databinding/页面开发项目实战

1.9K80

Android Architecture Components Part2:LiveData

例如界面数据的更新,当数据发生变化时,我们要通知界面进行更新ui,这时我们可以使用LiveData在当前Activity/Fragment中对该数据注册一个观察者,实时监听数据的任何改动。...每一次改动LiveData都会发送通知观察者。 另一方面,LiveData感知界面的生命周期,所以只有界面生命周期的STARTED或者RESUMED状态才会通知观察者。...如果你一直处于后台且数据一直变化,LiveData是不会发生通知,只有界面再一次回到前台,这时LiveData才会发生通知且只会发送一次,数据的更新取的是最后一次的变化数据。...一旦MutableLiveData所包裹的数据发生变化,我们可以通过postValue()(asynchronously)与setValue()(synchronously)来设置值与发送通知,告诉观察者数据已经改变...Transform 通知观察者数据改变之前,如果你想改变LiveData中的值类型,可以使用Transformations Transformations.map() 获取原有类型中的某个特定的类型值

52520
领券