Livedata 概览 LiveData 是一种可观察的数据存储器类。...与常规的可观察类不同,LiveData 具有生命周期感知能力 如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态...LiveData 只会将更新通知给活跃的观察者。为观察 LiveData 对象而注册的非活跃观察者不会收到更改通知。 您可以注册与实现 LifecycleOwner 接口的对象配对的观察者。...model.sendData() } 复制代码 合并两个 Livedata(MediatorLiveData) 想象这样一个场景,您的 app 里面有一个评论列表的功能...,可以对列表内容进行点赞。
//两个liveData,由liveDataSwitch决定 返回哪个livaData数据 MutableLiveData liveData3 = new MutableLiveData...> liveData5 = new MutableLiveData(); MutableLiveData liveData6 = new MutableLiveData...LifecycleOwner、observer 组装成LifecycleBoundObserver包装实例wrapper,使用putIfAbsent方法observer-wrapper作为key-value添加到观察者列表...(putIfAbsent意思是只有列表中没有这个observer时才会添加。)...传入的livaData、Observer 包装成Source实例,添加到列表mSources中。
在一个List/Detail模式中,这里是列表的ViewModel。...用户点击按钮,于是跳转了Detail界面 用户按下返回键,回到列表界面中去 观察者在Activity处于Pause的堆栈中时,会变成不活动状态,返回时,会再次成为活动状态 但此时,观察的值仍然是True...例如:一个值可以在没有观察者活动的情况下被设置,所以新的观察者会直接取代它。另外,从不同的线程设置值可能会导致竞赛条件,只产生一个对观察者的调用。...确保你的用户界面与你的数据状态相匹配:LiveData遵循观察者模式,当生命周期状态改变时,LiveData会通知观察者对象。你可以整合你的代码来更新这些观察者对象中的UI。...不再需要手动处理生命周期:UI组件只是观察相关的数据,而不需要主动停止或恢复观察。LiveData会自动管理这一切,因为它在观察时就知道相关的生命周期状态变化。
3.2 实施 我们来举个完整的例子 - 在页面中显示用户信息列表,来说明 Jetpack MVVM 的具体实施。...3.2.1 构建界面 首先创建一个列表页面 UserListActivity,并且知道页面所需要的数据是,用户信息列表。 那么 用户信息列表 如何获取呢?...() { userListLiveData = new MutableLiveData(); loadingLiveData = new MutableLiveData...() { userListLiveData = new MutableLiveData(); loadingLiveData = new MutableLiveData...例如例子中的加载进度条,就是观察 ViewModel中的MutableLiveDataloadingLiveData 进行操作的。
3、LiveData与MutableLiveData区别 4、LiveData的使用 5、MutableLiveData的使用 6、LiveData和MutableLiveData的可变与不可变 7、...其他方法 1、什么是LiveData LiveData是一个观察者模式的数据实体类,它可以在所有注册观察者回调里查看数据是否有更新。...下面代码讲解 抽象类,无法直接new 2、什么是MutableLiveData MutableLiveData的父类是LiveData 用法和LiveData类似,也是在注册观察者回调里查看更新数据 可变...或者Fragment的全部观察者 hasActiveObservers() 如果此LiveData具有活动(Activity或者Fragment在前台,当前屏幕显示)的观察者,则返回true。...其实如果这个数据的观察者在最前台就返回true,否则false。 hasObservers() 如果此LiveData具有观察者,则返回true。
主要有如下两个作用: 实时刷新数据 防止内存泄漏 LiveData 采用的是观察者模式,当 LiveData 保存的数据发生变化时就会通知观察者,观察者接收到通知后可以进行 UI 数据刷新或者其他操作。...对象,它是 LiveData 的子类,然后给它添加观察者对象,代码如下: java: final MutableLiveData simpleLiveData = new MutableLiveData...0 时调用,即有活跃的观察者对象时调用 protected void onInactive():当活跃的观察者对象数量等于 0 时调用,即无活跃的观察者对象时调用 MutableLiveData:可变的...它新增了两个方法 addSource 、removeSource 用于添加和删除 LiveData 源 Observer: 观察者接口,通过该接口对 LiveData 数据进行观察 2、详细使用 MutableLiveData... userLiveData1 = new MutableLiveData(); MutableLiveData userLiveData2 = new MutableLiveData
首先,我们需要定义一个LiveData对象,例如: LiveData nameLiveData = new MutableLiveData(); 然后,我们可以使用observe(... nameLiveData = new MutableLiveData(); public void setName(String name) {...它使用观察者模式来通知观察者数据发生了变化。当LiveData对象被观察时,它会将观察者添加到观察者列表中。当LiveData对象发生变化时,它会通知观察者。...当Activity或Fragment处于STARTED或RESUMED状态时,LiveData会将观察者添加到观察者列表中,并开始向观察者发送数据更新通知。...当Activity或Fragment处于STOPPED或DESTROYED状态时,LiveData会自动将观察者从观察者列表中移除,停止向其发送数据更新通知。
class JokesDetailViewModel : ViewModel() { //创建 LiveData private val _state by lazy { MutableLiveData...就有了 MutableLiveData 继承 LiveData 将发送数据的方法改为了 public public class MutableLiveData extends LiveData { /** * Creates a MutableLiveData initialized with the given {@code value}...* * @param value initial value */ public MutableLiveData(T value) { super...(value); } /** * Creates a MutableLiveData with no value assigned to it. */ public
LiveData 是一种可观察的数据存储器类。它是一个数据的容器,将数据包装起来,使数据成为被观察者,当数据发生变化时,观察者能够获得通知。...这种感知能力确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。 优势 确保界面符合数据状态 LiveData 遵循观察者模式。...不需要手动处理生命周期 界面组件只是观察相关数据,不会停止或恢复观察。LiveData 将自动管理所有这些操作,因为它在观察时可以感知相关的生命周期状态变化。...MutableLiveData value; public MutableLiveData getCurrentValue() { if...homeViewModel.getCurrentValue(), String::valueOf); //aLiveData监听bLiveData内容的变化,变化时从bLiveData获取相应的cLiveData, //添加到aLiveData的监听列表里
init { number = MutableLiveData() number.value = 0 } } 然后 , 在 Activity...: ViewModel() { lateinit var number: MutableLiveData init { number = MutableLiveData...观察者 , 如果 监听到了 LiveData 数据变化 , 直接 回调 监听器的 androidx.lifecycle.Observer#onChanged 函数 ; DataBinding 布局 生成对应的...向该 ViewDataBinding 对象中设置 ViewModel 对象 , 即可完成数据绑定 实现了 DataBinding + ViewModel 组合使用 , 在最后为 LiveData 设置观察者...设置 LiveData 在 DataBinding 中观察者生命周期所有者 activityMainBinding.lifecycleOwner = this 二、ViewModel +
LiveData 与普通可观察类不同的是LiveData具有生命周期感应能力,比如我们在页面中进行网络请求结束后,需要将数据显示在UI上,如果此时页面被销毁就会有空指针等异常,我们还需要在页面销毁的时候单独处理...android:layout_width="match_parent" android:layout_height="wrap_content" /> 新建对应的Main4ActivityModel 来观察...程序达到了我们预期的结果,但是我们这里知道,对于学生这个属性来说,学号和姓名是不可变的,只有分数是可变的,所以这个时候我们可以使用map函数只对分数进行观察,改写ViewModel中的代码如下所示: public...在实际项目开发中我们使用switchMap的频率还是很高的,毕竟 只要LiveData对象是调用其他方法获取的 ,我们就可以这样做, 在点击事件中我们设置了可观察数据:分数,当分数改变的时候,就会执行switchMap...函数 ,switchMap会将获取的数据转换为可观察的LiveData,所以我们监听这个LiveData对象 就可以观察到数据的变化了。
我这里for循环add了10次观察者呀。难道是lambda导致的问题?嗯,我们可以把Observer的数量打出来看看,看看到底是哪里出了问题。...看下源码,如下图所示:我们的观察者实际上都是存在这个map里面的,我们取出来这个map的size就可以知道原因了。...那么问题来了,我明明是for循环添加了10个观察者啊,为啥一改成lambda的写法,我的观察者就变成1个了?遇事不决我们反编译(用jadx直接反编译我们的debug app)一下看看。...这里要注意了,我是先更新的livedata的值,过了一段时间以后才注册的观察者,那么此时,理论上我应该是收不到livedata消息的。...导致你的页面再也回不到列表页了。 2.3 解决方案一:引入中间层 俗话说的好,计算机领域中的所有问题都可以通过引入一个中间层来解决。
因此,我们认为LiveData就是一个数据容器,它负责将数据包裹起来,使数据成为被观察者,当数据发生变化时,LiveData会通知观察者以便观察者做出响应。...MutableLiveData getName() { if (name == null) { name = new MutableLiveData...事实上,最简单的LiveData使用方法是MutableLiveData,如下所示。... mutableLiveData = new MutableLiveData(); mutableLiveData.observe(this, new Observer...通常情况下会在 ViewModel 中使用 MutableLiveData,然后 ViewModel 只会向观察者公开不可变的 LiveData 对象,如下所示。
LiveData是一个可被观察的数据持有者类。...(3)不需要手动处理生命周期.UI组件只需要去观察相关数据,不需要手动去停止或恢复观察。LiveData会进行自动管理这些事情,因为在观察时,它会感知到相应组件的生命周期变化。...2.用法 (1)创建LiveData对象 public class UserModel extends ViewModel { private MutableLiveData name...; int age; public MutableLiveData getName() { if (name == null) {...name = new MutableLiveData(); name.setValue("lalalala"); } return name;
LiveData是一个可被观察的数据容器类,具体来说,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为被观察者,当数据发生变化的时候,观察者能够获得通知。...因此,LiveData通常被放在ViewModel中使用,用于包装ViewModel中那些需要被外界观察的数据。...三.LiveData的基本使用方法 LiveData是一个抽象类,不能直接使用,通常使用的是他的直接子类MutableLiveData。...下面我们改造上一节的代码,如下所示: public class TimerViewModel extends ViewModel { private MutableLiveData观察者。
介绍 观察者属于行为模式,当一个对象改变时,会通知订阅者做相应的处理。 是一种低耦合的方式,观察者和被观察者者之间不互相依赖。...缺点或者说需要注意的点:1、如果观察者很多,要通知所有的观察者需要很多时间 2、观察者之间互相循环调用,会导致系统崩溃。...Demo 1、定义一个被观察者 public class Subject { //监控的状态 private Integer state; //维护所有观察者的列表 private...= new ArrayList(); public Integer getState() { return state; } //状态被改变 通知所有的观察者.../** * 二进制观察者 */ public class BinaryObserver extends Observer { public BinaryObserver(Subject
LiveData是一个可观察的数据持有者类。观察者可以方便我们以异步的方式获取数据,同时LiveData也是有生命周期感知的。如果其生命周期处于STARTED或RESUMED状态。...LiveData会将观察者视为活动状态,并通知其数据的变化。LiveData未注册的观察对象以及非活动观察者是不会收到有关更新的通知。... defaultWallet; private final MutableLiveData defaultNetwork; private...final MutableLiveData tokens; private final MutableLiveData prices; } MutableLiveData...defaultWallet中,然后UI对 defaultWallet 进行观察显示。
---- 为什么要引进 LiveData LiveData 是一个可以被观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。...MutableLiveData(); public MutableLiveData getNameEvent() { return mNameEvent;...这样我们就完成了对 mNameEvent 数据源的观察。... mNameEvent = new MutableLiveData(); public MutableLiveData getNameEvent() {...如果用传统的方式来实现,那么我们一般才采取观察者的方式来实现,这样,当我们需要观察数据的时候,我们需要添加 observer,在界面销毁的时候,我们需要移除 observer。
可观察性发展背景 可观察性的概念起源于工业领域,在该领域中,可观察性被定义为从系统外部输出推断系统内部健康状态的能力。...在Cindy Sridharan 提出可观察性之前,谷歌著名的 SRE 体系就已经为可观察性奠定了理论基础,也就是说在微服务、可观察性等概念出现以前,业内通常称之为监控。...以上三种形式的组合使用将会产生丰富的观察数据,日志易由此推出了国产可观察性监控平台——观察易。...观察易,日志易可观察性监控平台 3.jpg 观察易是一个基于日志易平台,从业务-服务-接口-设备四层维度对应用系统进行分析的可观察性监控平台,接入基础监控指标和业务分析日志数据后,通过梳理业务层面的依赖关系...观察易加强了日志、链路、指标的三大可观察性支柱间的关联,从而缩短了发现并解决问题的时间。
领取专属 10元无门槛券
手把手带您无忧上云