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

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

下面来看基本用法: 创建LiveData实例,指定源数据类型 创建Observer实例,实现onChanged()方法,用于接收源数据变化并刷新UI LiveData实例使用observe()方法添加观察者...observer和Activity一起作为参数调用mLiveData的observe()方法,表示observer开始观察mLiveData。...另外,除了使用observe()方法添加观察者,也可以使用observeForever(Observer) 方法来注册未关联 LifecycleOwner的观察者。...3.1 添加观察者 LiveData原理是观察者模式,下面就先从LiveData.observe()方法看起: /** * 添加观察者. 事件在主线程分发....plug()中让源LiveData调用observeForever方法添加永远观察者-自己。

4K30

AndroidJetpack Livedata应用场景分析

/Fragment 的 onCreate 中注册 Livedata 监听(因为在 onStart 和 onResume 中进行监听可能会有冗余调用) Livedata 简单使用 仍然还是用我们倒计时的例子...中的数据更新,当点击 activity 中按钮的时候会调用 viewmodel.sendData 方法发送数据,然后发送的数据会做一定的转换给 activity,然后 activity 打印日志展示...} 的名字杜甫知道") } } data class SwitchUser(var name: String, var age: Int) 调用部分代码 model.mapLiveData.observe...还有一个 liveCombind 用来回调超过十次调用的场景 init 方法中 liveCombind.addSource 调用就是表示用来中间拦截 livedata1 和 livedata2 的数据更新...Livedata 对象,供我们注册监听 activity 中注册 livedata 监听 model.startAsyncWithSecond(3).observe(this){

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

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

    释义: 定义一个 MutableLiveData (LiveData 的一个常用子类),通过 observe 方法可以订阅修改数据的通知,通过 postValue()或者 setValue() 方法可以更新数据...2.1 LiveData.observe() LiveData 的使用流程从 observe() 开始,咱们尝试从 observe() 方法 开始分析: @MainThread public void...这里需要注意的是,当我们调用 observe() 注册后,由于绑定了 owner,所以在 active 的情况下,LiveData 如果有数据,则 Observer 会立马接受到该数据修改的通知。...这时候需要使用 AlwaysActiveObserver ,改调用 observe 方法为调用 LiveData.observeForever(Observer) 方法即可。...setValue 只不过把操作放到主线程,适合在异步线程里调用,setValue 必须在主线程里调用; 如果同时多次调用 postValue 或 setValue 修改数据,只会修改成最新的那个数据,

    92320

    LiveData详细分析

    目录介绍 01.LiveData是什么东西 02.使用LiveData的优势 03.使用LiveData的步骤 04.简单使用LiveData 05.observe()和observerForever(...) 06.LiveData原理介绍 07.observe订阅源码分析 08.setValue发送源码分析 09.observeForever源码 10.LiveData源码总结 00.使用LiveData...通过 observe()方法连接观察者和LiveData。observe()方法需要携带一个LifecycleOwner类。这样就可以让观察者订阅LiveData中的数据,实现实时更新。...04.简单使用LiveData 4.1 单独使用LiveData 举一个最简单的案例代码:liveData = new MutableLiveData(); liveData.observe(this...调用 observe() 注册后,由于绑定了 owner,所以在 active 的情况下,使用LiveData中setValue发送数据,则 Observer 会立马接受到该数据修改的通知。

    2.9K00

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

    而 LiveData 规定了,当我们开发者订阅数据通知(调用observe())时,必须传递相应的 lifecycle 对象,其内部自然就是为了注册相应的观察者,从而做到生命周期感知,不然它怎么能自己解绑呢...,节省性能;以及能不能将解绑逻辑让框架自行执行,从而免除调用者手动调用模版代码;自然而然,我们就会想到 Lifecycle ,所以我们可以在 observe() 这里做改动: 我们更改了 observe...; 最后,当用户在调用 observe() 订阅数据更新时,我们就将用户传递的观察者使用包装类包装起来,并缓存到我们的观察者map中,接着再将其 add() 到 lifecycle 的生命周期观察数组里...问题很简单,在上面我们已经说过了,当我们调用 observe() 添加数据观察者时,内部实际会被包装为 LifecycleBoundObserver,从而添加到 lifecycle 的生命周期观察者列表...常见有如下几个解决思路: 反射解决version 在调用 observe() 方法里,反射相应的包装类 ObserverWrapper ,把其的版本号更改为 LiveData 现有的版本号;

    1.4K20

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

    通过使用observe()方法,将上述的LiveData对象和Observer对象关联在一起。...这样可以确保系统不在Activity或Fragment的onResume()方法进行多余的调用;另外这样也确保Activity和Fragment尽早有数据可以进行显示。...model.currentName.observe(this, nameObserver) } } 在讲nameObserver对象传给observe()方法后,存储在LiveData最近的值以参数的形式立即传递到...当然,如果此时LiveData没有存储值的话,onChange()方法不会被调用。 更新 LiveData 对象 LiveData本身没有提供公共方法更新值。...setValue() 注意到value=price这里是调用了setValue(price)方法,通过该方法更新LiveData的值,进而通知处于活跃状态的订阅者。

    3K30

    LiveData的前世今生

    另外,从不同的线程设置值可能会导致竞赛条件,只产生一个对观察者的调用。 但前面这种解决方法的主要问题是,它很难理解,而且很难看,同时,我们如何确保在导航事件发生后值能被正确的重置?...navigateToDetails.value = false } } 这种解决方法的问题是,代码中有一些模板代码(每个事件在ViewModel中都有一个或者多个新方法),而且容易出错;很容易忘记从观察者那里调用...如果你不小心增加了一个以上的观察者,只有一个会被调用,而且不能保证是哪一个。...LiveData对象与系统服务连接一次,然后任何需要该资源的观察者就可以观察LiveData对象。欲了解更多信息,请参见扩展LiveData。...(this) {         result.value = it     }     return result } 然后,如果想有一个单一的事件,只需在你的ViewModel中像这样调用这个扩展方法

    1.1K10
    领券