【dz源码带模板】【django 源码 编程技巧】【仿小鹿live源码】rxbus 源码

2024-11-28 11:48:34 来源:淮南源码网 分类:探索

1.LiveDataBus

rxbus 源码

dz源码带模板

LiveDataBus

dz源码带模板        LiveDataBus是基于LiveData实现的类似EventBus的消息通信框架,它是基于LiveData实现的,完全可以代替EventBus,RxBus;

dz源码带模板

        LiveDataBus的主要是基于发布订阅设计模式,发布订阅模式定义了一种 “一对多” 的关系,和观察者模式是完全不同的两个设计模式;

dz源码带模板

        下面详细介绍核心类LiveData

dz源码带模板

        LiveData是一个可以被观察的数据holder,并且可以自动感知控件的生命周期,不会发生内存泄漏;

dz源码带模板

        LiveData需要一个观察者对象,当LiveData的值发生改变时,观察者会察觉到这个改变;

dz源码带模板

        使用livedata注册观察者监听

dz源码带模板

        使用livedata发送消息给观察者

dz源码带模板

        LiveData其实就是一个存放数据的holder,类似ViewHolder的holder,存放在LiveData里的数据会拥有LiveData的特性;

dz源码带模板

        LiveData是Android Architecture Components的一个类;这个类是谷歌在Google I/O 发布一套帮助开发者解决Android架构设计的方案。这个类有四个核心,后续会一一介绍;

dz源码带模板

        用第一代LiveDataBus订阅

dz源码带模板

        发送消息

dz源码带模板

        至于说他是第一代bus,说明肯定有问题,问题就是在post或者set一个value后,只要在一个frag/act里observe了,无论组件是否启动,都会收到value,即当在act1中post了,在act2中observe,但是post的时候act2没有运行,当启动act2,收到了value。收到了订阅前的消息

dz源码带模板

        通过查看LiveData的源码发现setValue()开始,依次调用了

dz源码带模板

dispatchValue()-> considerNotify()-> observer.onChanged()

dz源码带模板

        postValue()会调用setValue()所以同理;

dz源码带模板

        这就解释了为什么我们可以在observer中收到post来的value,为什么act2不运行也可以收到value;

dz源码带模板

        我们注意到当observer.mLastVersion >= mVersion的时候会直接return,不调用onChanged从而解决上面的问题。

dz源码带模板

        我们需要拿到mLastVersion,就需要拿到observer对象,顺着源码发现observer对象存在mObservers的map中;我们自定义一个mutableLiveData,改写他的observe(),在observe()中,通过反射拿到mObservers对象,从而拿到observer.mLastVersion,将mVersion赋值给他;

dz源码带模板

        hook的作用相当于 在observe()调用后执行observer.mLastVersion = mVersion; 让considerNotify()直接return,可是我们如何收到订阅后的post呢?因为只有订阅的时候才会hook,在hook后,我们调用post(),会mVersion++,所以在判断 if (observer.mLastVersion >= mVersion) 的时候就又会是false了;

dz源码带模板

dz源码带模板

更多资讯请点击:探索

推荐资讯

聚流量源码_聚流量平台

1.������Դ��2.我要怎么选择一个合规的社区团购平台3.36氪首发|「喜姐炸串」获2.95亿元A轮融资,已在全国累计签约超1400家门店4.定制开发小程序平å

安克利治世界觀|天下雜誌

未來●一九九九年,歐洲將成立中央銀行及單一貨幣制。●美國將全力施壓,促使世界各國重視智慧財產權,台灣企業必須及早因應。●多邊磋商的GATT功能在激烈的經貿衝突中越趨式微,世界重回以雙邊會談解決衝突。●

車用晶片不缺了? 傳台積電赴歐設廠「延2年」

台積電前往歐洲建廠的時程恐怕要延後兩年!半導體業界傳出,由於車用需求不再吃緊,加上許多車用晶片的客戶轉向日本和美國生產,影響台積電需求,才會有延後建廠的消息。不過台積電表示,現階段維持1月份法說會的看