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

LiveData精通指南:解锁其潜力

在Android开发中,LiveData是一个非常有用的工具。它可以帮助我们在应用程序中实现响应式编程,并且还具有生命周期感知能力,可以帮助我们避免内存泄漏。...LiveData是Android Jetpack组件之一,它具有生命周期感知能力,可以确保观察者只会在活动的生命周期内接收数据更新。...,我们将当前活动作为观察者,并在LiveData对象发生更改时更新数据。...nameLiveData.observeForever(s -> { // Do something with the updated data }); // 在适当的时机调用removeObserver...解决方法是在活动状态下观察LiveData对象,或使用Lifecycle组件来管理LiveData对象的生命周期。 数据更新不及时:当LiveData对象发生更改时,观察者没有及时接收到更新。

26510

【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

ViewModel 中的数据发生了变化 , 如何将变化应用到视图组件中 , 在视图中显示最新的数据内容 , 此时就用到了 LiveData 组件 ; 在 ViewModel 的基础上 , 通过 引入 LiveData..., 可以将 运行过程中 ViewModel 中的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用了 LiveData 后 , 必须调用...设置 LiveData 在 DataBinding 中观察者生命周期所有者 activityMainBinding.lifecycleOwner = this 在最后调用的 ViewDataBinding...#setLifecycleOwner 函数 , 设置 LiveData 在 DataBinding 布局 中 的 观察者 的 生命周期所有者 ; LiveData 如果要生效 , 需要为其 设置 androidx.lifecycle.Observer...实例 , 然后设置给 DataBinding 布局 ; 设置 LiveData 观察者 , 在 ViewDataBinding 类中 , 可以直接调用 调用的 ViewDataBinding#setLifecycleOwner

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

    Android Jetpack - LiveData

    生命周期状态更改时,LiveData 会通知 Observer 对象。你可以合并代码以更新这些 Observer 对象中的 UI。...每次应用程序数据更改时,你的观察者都可以在每次更改时更新 UI,而不是更新 UI 没有内存泄露 观察者绑定到 Lifecycle 对象,并在其相关生命周期被破坏后自行清理 不会因为活动停止而崩溃 如果观察者的生命周期处于非活动状态...: 1、创建持有任意类型的 LiveData 实例,这一步通常在 ViewModel 中完成 2、创建一个 Observer 对象并重写其 onChanged() 方法,该方法会在 LiveData 数据更改时被回调并返回最新数据...,此模式对于使 UI 中显示的数据与存储在数据库中的数据保持同步非常有用。...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象中的值,

    2K30

    Jetpack之LiveData详解

    简介 LiveData 是Jetpack中的一个组件,是一个可被观察的数据存储器类, 具有感知组件生命周期的能力,LiveData 可以感知组件生命周期活跃状态发送数据更新,在组件销毁时移除观察者对象,...主要有如下两个作用: 实时刷新数据 防止内存泄漏 LiveData 采用的是观察者模式,当 LiveData 保存的数据发生变化时就会通知观察者,观察者接收到通知后可以进行 UI 数据刷新或者其他操作。...容器的数据 protected void onActive():当活跃的观察者对象数量大于 0 时调用,即有活跃的观察者对象时调用 protected void onInactive():当活跃的观察者对象数量等于...0 时调用,即无活跃的观察者对象时调用 MutableLiveData:可变的 LiveData,是我们最常用的 LiveData 子类。...数据源,或者调度多个 LiveData 数据源决定向观察者发送那个 LiveData 的数据更新。

    1.7K20

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

    假设名字叫做 observe() ,当然也需要传入具体的观察者 IObserve 接口对象; 为了支持数据更改,我们需要新增一个具体的设置数据的方法,假设名字叫做 setValue(); 为了在用户调用...接口,以及内部保存着我们的观察者; 最后,当用户在调用 observe() 订阅数据更新时,我们就将用户传递的观察者使用包装类包装起来,并缓存到我们的观察者map中,接着再将其 add() 到 lifecycle...此时用户更改了数据,那这个数据更改就没法通知给用户;那如果观察者又转为活跃状态了,本次更改岂不是跳过了?相应的,我们又怎么确保同一个数据更新不会触达用户两次呢?...因为对于页面而言,这个观察者的确是新添加的,如果 LiveData 中存在数据,肯定需要第一时间同步到页面更新。...如果你的项目是 Java 编写,那 LiveData 仍然是你维护页面数据状态的最好搭档。 如果你的项目是 Kotlin 编写,那么 LiveData 依然可以满足你的需求。

    1.4K20

    Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus

    正是由于LiveData对组件生命周期可感知特点,因此可以做到仅在组件处于生命周期的激活状态时才更新UI数据。 LiveData需要一个观察者对象,一般是Observer类的具体实现。...当观察者的生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化;在观察者处于其他状态时,即使LiveData的数据变化了,也不会通知。...LiveData的优点 UI和实时数据保持一致,因为LiveData采用的是观察者模式,这样一来就可以在数据发生改变时获得通知,更新UI。...Android Architecture Components的特点 数据驱动型编程 变化的永远是数据,界面无需更改。 感知生命周期,防止内存泄漏 高度解耦 数据,界面高度分离。...在LiveData的dispatchingValue中,又会调用LiveData的considerNotify方法。 ?

    2.4K30

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

    LiveData具有以下优点: 1.能够保证数据和UI统一 这个和LiveData采用了观察者模式有关,LiveData是被观察者,当数据有变化时会通知观察者(UI)。...Observer接口就是观察者,其中定义了LiveData数据变化的回调方法onChanged()。...四、LiveData主要涉及到的时序有三个: 在Fragment/Activity中通过LiveData.observer()添加观察者(observer()方法中的第二个参数)。...根据Fragment/Activity生命周期发生变化时,移除观察者或者通知观察者更新数据。 当调用LiveData的setValue()、postValue()方法后,通知观察者更新数据。...MyData.java: package zhangphil.app; import android.arch.lifecycle.MutableLiveData; import android.util.Log

    1.4K10

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

    另外,除了使用observe()方法添加观察者,也可以使用observeForever(Observer) 方法来注册未关联 LifecycleOwner的观察者。...2.3 高级用法 如果希望在将 LiveData 对象分派给观察者之前对存储在其中的值进行更改,或者需要根据另一个实例的值返回不同的 LiveData 实例,可以使用LiveData中提供的Transformations...只要任何原始的 LiveData 源对象发生更改,就会触发 MediatorLiveData 对象的观察者。...: 与存储在本地数据库中的数据关联的 liveData5 与从网络访问的数据关联的 liveData6Activity 只需观察 MediatorLiveData 对象即可从这两个源接收更新。...plug()中让源LiveData调用observeForever方法添加永远观察者-自己。

    4K30

    Android 项目架构,你真的了解吗?

    livedata最重要的方法是一下几个: onActive()// 当前LiveData有超过一个的活跃的观察者时,被调用 onInactive()// 当前没有任何活跃的观察时,着被调用 setValue...中添加观察者,         * LiveData则可以通过LifecycleOwner来判断         * 当前传入的观察者是否是活跃的(也就是UI是否可见了)         */ myLocationListener.observe...中通过setValue()修改了数据时, //这里将会受到修改后的数据             }         });     } } 好了,LiveData基本的用法讲完了,由于有了LiveData...3.2 ViewModel ViewModel则相对简单些,因为他的作用是暂存UI相关的数据,保证即使Activity配置更改,重新创建时,数据依然能够被保存好。...,它负责从各个地方获取数据,然后把数据装到LiveData中,提供给UI;当然ViewModel也可以在不同的Fragment中共享,在这里就不多讲了。

    1.4K10

    事件总线方案实践

    在一对多的场景中,发布消息事件后,订阅事件的页面只有在可见的时候才会处理事件逻辑。 使用者不用显示调用反注册方法。...dispatchingValue的情况 // 当对应数据的观察者在执行的过程中, 如有新的数据变更, 则不会再次通知到观察者。...- 如果 ObserverWrapper 的 mLastVersion 小于 LiveData 的 mVersion,那么就会执行的 onChange() 方法去通知观察者数据已更新。...能不能从Map容器mObservers中取到LifecycleBoundObserver,然后再更改version呢?...代码如下所示:/\*\* \* 在给定的观察者的生命周期内将给定的观察者添加到观察者列表所有者。 \* 事件是在主线程上分派的。如果LiveData已经有数据集合,它将被传递给观察者。

    1.9K30

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

    LiveData 是 Android Architecture Components 中的一员,先看下官方是如何介绍的: LiveData is an observable data holder class...,已经订阅的 Observer 能够得到数据更改的通知,也即回调 onChanged() 方法。...4.1 Sticky Event LiveData 被订阅时,如果之前已经更改过数据,并且当前 owner 为 active 的状态,activeStateChanged() 会被调用,也即会立马通知到...4.2 AlwaysActiveObserver 默认情况下,LiveData 会跟 LicycleOwner 绑定,只在 active 状态下更新,如若想要不管在什么状态下都能接收到数据的更改通知的话...总结 LiveData 基于观察者模式,并且可以感知生命周期,这使得我们使用 LiveData 既可以享受观察者模式带来的隔离数据与 UI 等强大的解耦能力,还可以享受感知生命周期带来的巨大便利。

    92320

    LiveData 还有学习的必要吗?—— Jetpack 系列(2)

    本文已收录到 GitHub · Android-NoteBook[1] 中。这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] 跟我一起成长。...虽然 LiveData 不再是 Google 主推的组件,但考虑到 LiveData 依然存在于大量存量代码中,以及 LiveData 伴随着 Android 生态发展过程中衍生的问题和解决方案,我认为...LiveData.java // LiveData 持有的版本号 private int mVersion; // 异步设置数据 postValue() 最终也是调用到 setValue() @MainThread...: 1、注册观察者时,观察者绑定的生命处于活跃状态,并且 LiveData 存在已设置的旧数据; 2、调用 setValue() / postValue() 设置数据时,观察者绑定的生命周期处于活跃状态...#obChanged())的过程中重新设置新数据,此时会中断旧数据的分发,部分观察者将无法接收到旧数据; 情况 3:观察者绑定的生命周期处于非活跃状态时,连续使用 setValue() / postValue

    3.6K10

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

    vonInactive():当 LiveData 没有任何处于活动状态的观察者时该方法被调用。由于没有观察者在监听,所以没有理由保持与 LocationManager 的连接。...这是非常重要的,因为保持连接会显著消耗电量并且没有任何好处。 setValue():调用该方法更新 LiveData 实例的值,并将此变更通知给处于活动状态的观察者。...正确处理配置更改:如果 activity 或 fragment 由于配置更改(如:设备旋转)重新创建,将会立即收到最新的有效位置数据。...;LiveData user = Transformations.switchMap(userId, id -> getUser(id) ); 使用这些转换允许在整个调用链中携带观察者的 Lifecycle...如果在调用时没有处于活动状态的观察者,在添加观察者之前不会进行任何运算。 该机制允许以较少的资源根据需要惰性运算来创建 LiveData。

    1.1K30

    Android | LiveData 源码分析

    LiveData 只会将数据更新给活跃的观察者。 在添加观察者的时候,可以传入 LifecycleOwner 。...,它会在变为活跃状态时接收最新数据 配置更改后也会接收到最新的可用数据 共享资源,可以使用单例模式扩展 LiveData 对象,以便在应用中共享他们 LiveData 的使用 LiveData 是一种可用于任何数据的封装容器...转换 LiveData Transformations.map() 在数据分发给观察者之前对其中存储的值进行更改,返回一个新的 LiveData,可以使用此方法 private val _state...代码可以参考这里 数据倒灌现象 一般情况下,LiveData 都是存放在 ViewModel 中的,当Activity重建的时候,观察者会被 remove 掉,重建后会添加一个新的观察者,添加后新的观察者版本号就是...一般情况下我们都需要的是最新数据,如果非要所有数据,只能重写 LiveData 了。 参考 Android Developers

    1.1K20

    是时候更新手里的武器了—Jetpack架构组件简析

    这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。 ” LiveData 是一种可观察的数据存储器类。等等,这个介绍好像似曾相识?...不会因 Activity 停止而导致崩溃如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。...自动判断生命周期并回调方法如果观察者的生命周期处于 STARTED 或 RESUMED状态,则 LiveData 会认为该观察者处于活跃状态,就会调用onActive方法,否则,如果 LiveData...2) LiveData更新数据更灵活,不一定是改变数据,而是调用方法(postValue或者setValue)的方式进行UI更新或者其他操作。 好了。还是举个?...-> // 监听livedata的数据变化,如果调用了setValue或者postValue会调用该onChanged方法 //更新UI数据或者其他处理

    2.9K20

    “终于懂了“系列:Jetpack AAC完整解析(五)DataBinding 重新认知!

    所以 DataBinding 的本质就是 终态数据 与 UI控件 的绑定,具有以下优势: 无需多处调用控件,原本调用的地方只需要set数据即可 1的延伸,无需手动判空 1的延伸,完全不用写模板代码 findViewById...、调用ViewModel对数据的获取,这些处理及逻辑 和之前一毛一样,不同点在于 Item数据的展示: 在UserItemViewHolder中,不用去findViewById了,而是直接DataBindingUtil.bind...而 我们 上一篇 中 MVVM 是使用 LiveData,实现数据驱动的,它包裹的 User 是没有继承BaseObservable的, 要继承嘛?不用!...不引用 View 及 Context 三、View 通过 LiveData 观察数据变化,不是直接向View 推送数据 四、ViewModel中 除了 业务 LiveData 外,还应该提供 LiveData...五、使用SingleLiveEvent 来传递 事件类消息:仅在显式调用setValue()或call()时 才会通知观察者;只有一个观察者会收到更改通知。

    1.5K10

    ViewModels and LiveData- Patterns + AntiPatterns

    Using a data repository 正如在《应用程序架构指南》中看到的那样,大多数应用程序都有多个数据源,例如。...✅ 添加一个数据存储库作为你的数据的单点入口 Dealing with data state 考虑这个场景:你正在观察一个由ViewModel暴露的LiveData,它包含一个要显示的项目列表。...参见我们样本中的资源类:https://developer.android.com/jetpack/guide#addendum。 ✅使用包装器或另一个LiveData暴露你的数据的状态信息。...✅考虑边缘情况、泄漏以及长期运行的操作会如何影响你架构中的实例。 ❌ 不要在ViewModel中放置对保存清洁状态或与数据有关的逻辑。你从ViewModel进行的任何调用都可能是最后一次。.../app/src/main/java/com/android/example/github/ui/repo/RepoFragment.kt ❌ 你通常不会扩展LiveData。

    1.1K30

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

    MVVM的核心思想是观察者模式,它通过事件和转移View层数据持有权来实现View层与ViewModel层的解耦....是反向绑定监听器 //当调用InverseBindingListener的onChange时 //会调用@BindingAdapter所注解的方法将获得数据并写回到变量中. 2.6 配合...调用前,会变成该状态,变成此状态后将不会再出现任何状态改变,也不会发送任何生命周期事件 INITIALIZED,构造函数执行完成后但onCreate未执行时为此状态,是最开始时的状态 CREATED,在...4 LiveData LiveData是对Android组件生命周期感知的粘性事件,也就是说,在LiveData持有数据时,你去订阅它就能收到他最后一次接收到的数据.在实战中,我们能用到的LiveData.../Fragment被重建也能重新接收到LiveData保存的数据 //在组件DESTROYED时,LiveData会把它移出观察者列表 //当然你也可以不关联LifecycleOwner,让订阅一直保持

    3.9K01

    使用Lifecycle-Aware组件优化项目

    包含以下几个组件模块: lifecycle 处理生命周期,创建一个自动响应生命周期事件的用户界面 LiveData 构建底层数据库更改时通知试图的数据对象(数据驱动界面) ViewModel 存储未在应用旋转中销毁的...对于一些简单的数据,Activity可以使用onSaveInstanceState()方法,并从onCreate的bundle中重新获取,但这一方法仅仅适合一些简单的UI状态,对于列表型这种庞大的数据类型并不适合...ViewModel生命周期 LiveData LiveData 是一个可以保存数据和观察数据变化的组件。...LiveData的优势: 确保数据源跟UI展示一致——当数据源变化时,LiveData会通知观察者更新UI,前提是组件在激活状态下。...instead of compiler implementation "android.arch.lifecycle:common-java8:$lifecycle_version" /

    92320
    领券