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

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

不需要手动解除观察,开发者不需要在onPause或onDestroy方法中解除对LiveData的观察,因为LiveData能感知生命周期状态变化,所以会自动管理所有这些操作。...: 与存储在本地数据库中的数据关联的 liveData5 与从网络访问的数据关联的 liveData6Activity 只需观察 MediatorLiveData 对象即可从这两个源接收更新。...LiveData的使用就讲完了,下面开始源码分析。 三、源码分析 前面提到 LiveData几个特点,能感知生命周期状态变化、不用手动解除观察等等,这些是如何做到的呢?...数据变化时及时回调到 传入的 } } } Source是MediatorLiveData的内部类,是对源LiveData的包装。...这里为啥使用observeForever方法呢,这是因为源LiveData在外部使用时不会调用observer方法添加观察者,这里永远观察是为了在源LiveData数据变化时及时回调到 mObserver.onChanged

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

    Android LiveData 使用详解

    这里我们以观察网络状态变化为例子讲解 首先我们自定义一个 Class NetworkLiveData,继承 LiveData,重写它的 onActive 方法和 onInactive 方法 在 onActive...方法中,我们注册监听网络变化的广播,即ConnectivityManager.CONNECTIVITY_ACTION。...但是,如果我们用 LiveData 来实现的话,它内部逻辑都帮我们封装好了,我们只需要保证 AccountLiveData 是单例的就ok,在需要观察的地方调用 observer 方法即可。...LiveData 内部已经实现了观察者模式,如果你的数据要同时通知几个界面,可以采取这种方式 我们知道 LiveData 数据变化的时候,会回调 Observer 的 onChange 方法,但是回调的前提是...但是,对于你想做一些类似与在后台工作的(黑科技), liveData 就不太适合了,你可以使用 observeForever 方法,或者自己实现观察者模式去吧。

    4.9K40

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

    LiveData具有以下优点: 1.能够保证数据和UI统一 这个和LiveData采用了观察者模式有关,LiveData是被观察者,当数据有变化时会通知观察者(UI)。...7.资源共享 通过继承LiveData类,然后将该类定义成单例模式,在该类封装监听一些系统属性变化,然后通知LiveData的观察者,这个在继承LiveData中会看到具体的例子。...Observer接口就是观察者,其中定义了LiveData数据变化的回调方法onChanged()。...根据Fragment/Activity生命周期发生变化时,移除观察者或者通知观察者更新数据。 当调用LiveData的setValue()、postValue()方法后,通知观察者更新数据。...LiveData构建数据通信总线LiveDataBus 一、使用LiveData的理由 LiveData具有的这种可观察性和生命周期感知的能力,使其非常适合作为Android通信总线的基础构件。

    1.4K10

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

    此感知确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。 2.2 优点 1. 确保UI符合数据状态 LiveData遵循观察者模式。...4.不需要手动处理生命周期 UI组件只需要去观察相关数据,不需要手动去停止或恢复观察。LiveData会进行自动管理这些事情,因为在观察时,它会感知到相应组件的生命周期变化。 5....LiveData中的代码很简洁,400多行的代码,看起来也并不费劲,下面我们来分析下整个流程: 通过使用LiveData对象,为它创建观察者Observer 创建Observer时绑定Fragment生命周期...,可以看到,我们外部使用的Observer会以Source的成员变量的形式,添加到传入的LiveData中。...map()的原理就是基于MediatorLiveData,MediatorLiveData内部会将传递进来的LiveData和Observer封装成内部类,然后放在内部维护的一个Map中。

    1K20

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

    正如注释所说,LiveData 是一个数据持有容器,并且该容器可以感知生命周期的变化,在合适的时机通知观察者数据的变更。...super T> observer 是外部传入的回调接口,内部会被包装成 ObserverWrapper ,在此称之为观察者 。...和数据变化通知的回调接口,内部把回调接口包装成观察者 ObserverWrapper: LiveData liveData = new MutableLiveData();...典型的观察者模式,接下去就是通知各个观察者数据的变化了: @SuppressWarnings("WeakerAccess") /* synthetic access */ void...代码不多,内部就是一个典型的观察者模型,主要核心是在通知观察者的过程中引入了生命周期的感知,对于处于激活状态的 observer 才进行通知更新,当 observer 从非激活到激活状态也会收到通知

    49120

    LiveData的用法

    LiveData是一个可被观察的数据容器类,具体来说,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为被观察者,当数据发生变化的时候,观察者能够获得通知。...我们不需要自己去实现观察者模式,LiveData内部已经默认实现好了。   下面我们用LiveData替代上一节定义的接口,完成ViewModel和页面之间的通信。...LiveData的作用就是,在ViewModel中的数据发生变化的时候通知页面更新。因此,LiveData通常被放在ViewModel中使用,用于包装ViewModel中那些需要被外界观察的数据。...三.LiveData的基本使用方法   LiveData是一个抽象类,不能直接使用,通常使用的是他的直接子类MutableLiveData。...()方法对LiveData所包装的数据进行观察,当该数据发生变化的时候,就可以得到更新后的数据,并在onChanged()方法中做出处理。

    54920

    Jetpack之LiveData详解

    主要有如下两个作用: 实时刷新数据 防止内存泄漏 LiveData 采用的是观察者模式,当 LiveData 保存的数据发生变化时就会通知观察者,观察者接收到通知后可以进行 UI 数据刷新或者其他操作。...的使用 前面 Hello LiveData 简单展示了 LiveData 的使用 LiveData 除了依赖生命周期对象实现观察者的自动管理外,还可以添加忽略生命周期的观察者, 使用 observeForever...ViewModel 中使用,然后在 Activity / Fragment 中观察 ViewModel 里 LiveData 数据的变化: java: public class MainViewModel...(this) ,当数据绑定时 ViewDataBinding 内部会自动给绑定的 LiveData 对象添加观察者对象观察数据的更新从而刷新 UI 数据。...关于 DataBinding 的详细介绍请参考 Jetpack 之 DataBinding 原理 前面介绍了 LiveData 的使用,接下来看看 LiveData 内部是怎么实现只在生命周期活跃状态下回调观察者的观察方法的

    1.7K20

    Android Jetpack架构组件(四)之LiveData

    LiveData是一个持有数据的容器类,它持有的数据是可以被观察者订阅的,当数据发生变化时会通知观察者,观察者可以是 Activity、Fragment、Service 等对象。...而LiveData的作用就是包装ViewModel中数据,并让被观察者能够观察数据的变化。下图是官方Jetpack架构的示意图。...从上述步骤可以看出,LiveData使用了观察者模式,观察者通常是UI控制器,如Activity或Fragment,而被观察者则是LiveData包谷的数据对象, 当LiveData对象持有数据发生变化...工作原理 通过前面的介绍,我们知道LiveData是一个可观察的数据持有者,并且它是具有组件生命周期感知能力的,那它是如何观察组件生命周期变化的呢?...LiveData生命周期变化观察 前面介绍LiveData用法的时候提到,首先,我们创建 LiveData 实例,然后调用LiveData的observe方法来注册观察者,将ViewModel和LiveData

    3.4K00

    360度无死角,Android Jetpack面试技巧大揭秘

    主要优势包括: 生命周期感知:ViewModel能够感知与UI相关的生命周期变化,确保数据存活时间比短暂的UI组件更长。...参考简答: LiveData是一种可观察的数据持有者,ViewModel用于存储和管理与用户界面相关的数据。...ViewModel的存活周期: 使用ViewModel正确处理配置变化,保证数据在屏幕旋转等情况下不丢失。...参考简答: LiveData和Observable都是用于实现响应式编程的工具,但有一些关键区别: 生命周期感知: LiveData是生命周期感知的,它会在观察者(通常是UI组件)的生命周期内自动启动和停止...在高级任务调度中,我们可以: 自定义Worker: 实现Worker类以执行具体任务,并通过Constraints来定义任务的触发条件,如网络状态、电量等。

    28010

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

    Livedata 优点 1.保证UI与数据可以同步 Livedata 遵循观察者模式,并且 Livedata 会在生命周期变化的时候通知观察者。...LiveData对象一旦连接到系统服务,任何需要该资源的Observer都只需观察这个LiveData对象。 如何使用LiveData? 1.创建一个LiveData的实例来保存特定类型的数据。...所以我们需要在一开始就设置好观察。 通常情况下,LiveData只在数据有变化时,给活跃的Observer进行通知。 此行为的一个例外是,Observer在从非活跃状态变为活跃状态时也会收到通知。...例如,如果在UI中有一个从本地数据库或网络获取更新的LiveData对象,则可以将以下数据源添加到MediatorLiveData对象: 与存储在数据库中的数据关联的LiveData对象。...与从网络访问的数据关联的LiveData对象。 您的Activity只需观察MediatorLiveData对象即可接收来自两个数据源的更新。

    2.4K30

    Android-Jetpack笔记-LiveData

    LiveData即有生命的数据,通过观察者模式实现,当数据发生变化时可以收到回调。同时还具备感知宿主生命周期的能力。...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def lifecycle_version = "2.2.0" //extensions包含Lifecycles、LiveData、...String> mLiveData = new MutableLiveData(); void onCreate(Bundle savedInstanceState) { //观察数据变化...,回调 observer.mObserver.onChanged((T) mData); } 到这里,流程就已经走完了,值得注意的是,并不是所有生命周期都能观察到值的变化,试着在每个生命周期都...: 使用简单,可以避免内存泄漏,RxJava则需结合RxLifecycle 能感知生命周期,在页面活跃状态才进行通知,可以避免页面不可见时还在占资源 参考文章 掘金-Android官方架构组件LiveData

    59120

    MVVM+数据绑定,让你的Android应用飞起来,MVVM+数据绑定技巧,打造Android应用的数据流水线!

    使用LiveData、MutableLiveData等可观察的数据类型来存储数据,以便在数据变化时通知View层进行更新。...LiveData是一个可观察的数据持有者类,它能够在数据变化时通知观察者(如Activity或Fragment),并且它只会在观察者处于活动状态时更新。...数据同步处理: 当Model层的数据发生变化时,ViewModel会感知到这些变化,并更新其内部状态。...数据一致性:由于LiveData在内部处理了数据的同步,因此可以确保观察者接收到的数据是最新的。...另外,我们还在ViewModel中使用了ViewModelProviders来获取ViewModel实例,并通过调用其暴露的LiveData对象来观察数据变化。

    13310

    LiveData详细分析

    目录介绍 01.LiveData是什么东西 02.使用LiveData的优势 03.使用LiveData的步骤 04.简单使用LiveData 05.observe()和observerForever(...LiveData需要一个观察者对象,一般是Observer类的具体实现。当观察者的生命周期处于STARTED或RESUMED状态时,LiveData会通知观察者数据变化。...自动解除数据订阅 要想使用LiveData(或者这种有可被观察数据能力的类)就必须配合实现了LifecycleOwner的对象使用。在这种情况下,当对应的生命周期对象DESTORY时,才能移除观察者。...03.使用LiveData的步骤 创建一个持有某种数据类型的LiveData (通常是在ViewModel中) 创建一个定义了onChange()方法的观察者。...() 在内部会抛到主线程去执行更新数据,因此适合在子线程中使用;而 setValue() 则是直接更新数据。

    2.9K00

    Android Jetpack系列 之LiveData

    LiveData 与普通可观察类不同的是LiveData具有生命周期感应能力,比如我们在页面中进行网络请求结束后,需要将数据显示在UI上,如果此时页面被销毁就会有空指针等异常,我们还需要在页面销毁的时候单独处理...原因很简单,因为我们的数据每次从网络中获取 获取到的都是一个新的LiveData对象,所以我们无法监听到数据的变化,那么我们该如何做呢,这个时候switchMap就派上用场了 我们在ViewModel...setScore(int score) { this.score.setValue(score); } 使用switchMap将信息转化为可观察的LiveData对象: private LiveData...在实际项目开发中我们使用switchMap的频率还是很高的,毕竟 只要LiveData对象是调用其他方法获取的 ,我们就可以这样做, 在点击事件中我们设置了可观察数据:分数,当分数改变的时候,就会执行switchMap...函数 ,switchMap会将获取的数据转换为可观察的LiveData,所以我们监听这个LiveData对象 就可以观察到数据的变化了。

    1.1K20

    年薪50万的Android岗,为什么连这7个Jetpack原理都答不上?

    的"幽灵通知"陷阱(阿里P8夺命题) 候选人常见误区: “LiveData会自动去重”(实测重复值仍会触发观察者) “postValue()和setValue()完全等效”(线程安全性差异达90%) 高阶答案...: 粘性事件原理: LiveData内部维护mVersion版本计数器 新观察者会强制触发最后一次数据通知(源码见LiveData.considerNotify()) 规避方案: // 使用SingleLiveEvent...doWork()中执行同步网络请求 使用setExpedited()实现高优先级任务 原理7:Compose的"重组风暴"防御(快手UI性能题) 技术本质: 重组优化: 通过@Stable注解标记不可变数据...derivedStateOf { filterItems(rawList) // 仅过滤条件变化时触发重组 } } 三、自测你的Jetpack认知深度 Level...LiveData.observe()的开发者,就像拿着光剑却只会当棍子用的绝地武士” —— 某阿里P9技术大佬

    6110

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

    三个步骤就定义了使用LiveData的方式,从步骤可以看出,使用了观察者模式,当LiveData对象持有数据发生变化,会通知对它订阅的所有处于活跃状态的订阅者。...将LiveData解耦,不和特定的Activity或Fragment绑定在一起。 创建 观察LiveData 的对象 有了数据源之后,总需要有观察者来观察数据源,不然数据源就失去了存在的意义。...这里通过button的点击来给LiveData设置值,也可以网络或者本地数据库获取数据方式来设置值。 扩展 LiveData 可以通过下面的栗子来看看如何扩展LiveData。...onActivite() 当有活跃状态的订阅者订阅LiveData时会回调该方法。意味着需要在这里监听数据的变化。...当其中一个源数据发生变化是,都会回调订阅MediatorLiveData的观察者的onChanged()方法。例如我们在实际开发中,我们的数据源要么来自服务器,要么来自本地数据库。

    3K30

    ViewModels and LiveData- Patterns + AntiPatterns

    在ViewModels和View之间进行通信的推荐方式是观察者模式,使用LiveData或来自其他库的观察变量方式。...ViewModel在配置变化时被持久化,所以当重新请求发生时,不需要重新查询外部数据源(如数据库或网络)。 当长期运行的操作结束时,ViewModel中的观察变量会被更新。数据是否被观察并不重要。...使用Transformations是解决这个问题的一个非常方便的方法。Transformations.switchMap让你创建一个新的LiveData,对其他LiveData实例的变化做出反应。...Extending LiveData LiveData最常见的用例是在ViewModels中使用MutableLiveData,并将它们作为LiveData公开,使它们从观察者那里不可改变。...你也可以使用onActive()来启动一些加载数据的服务,但除非你有很好的理由,否则你不需要等待LiveData的观察。

    1.1K30

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

    ❌ 避免在 ViewModel 里持有视图层的引用 推荐使用观察者模式作为 ViewModel 层和 View 层的通信方式,可以使用 LiveData 或者其他库中的 Observable 对象作为被观察者...观察者模式 ? 一个很方便的设计 Android 应用中的展示层的方法是让视图层(Activity 或 Fragment)去观察 ViewModel 的变化。...这样有几个好处: ViewModel 在配置重新加载(比如屏幕旋转)的时候是不会变化的,所以没有必要从外部(比如网络和数据库)重新获取数据。...✅ 让 UI 观察数据的变化,而不是直接向 UI 推送数据 臃肿的 ViewModel 能减轻你的担心的主意一定是个好主意。...但是,如果用户旋转手机,则新的 Activity 被创建并开始观察这个字段。当对 LiveData 的观察开始时,Activity 会立即收到已经使用过的值,这将导致消息再次显示!

    3.1K30
    领券