响应式编程,说白了就是我先构建好事物之间的关系,然后就可以不用管了 。他们之间会因为这层关系而互相驱动 。其实也就是我们常说的观察者模式,或者说订阅发布模式 。
为什么说这个呢,因为MVVM的本质思想就是类似这种 。不管是双向绑定,还是生命周期感知,其实都是一种观察者模式,使所有事物变得可观察,那么我们只需要把这种观察关系给稳定住,那么项目也就稳健了 。
3)最后再说说MVVM为什么这么强大?
我个人觉得,MVVM强大不是因为这个架构本身,而是因为这种响应式编程的优势比较大,再加上Google官方的大力支持,出了这么多支持的组件,来维系MVVM架构,其实也是官方想进行项目架构的统一 。
优秀的架构思想+官方支持=强大
..............
12、LiveData 是什么?
LiveData 是一种可观察的数据存储器类 。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期 。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者 。官方介绍如下,其实说的比较清楚了,主要作用在两点:
- 数据存储器类 。也就是一个用来存储数据的类 。
- 可观察 。这个数据存储类是可以观察的,也就是比一般的数据存储类多了这么一个功能,对于数据的变动能进行响应 。
var liveData = https://www.isolves.com/it/cxkf/cxy/2020-12-22/MutableLiveData()liveData.observe(this, object : Observer {override fun onChanged(t: String?) {}})liveData.setVaile("xixi")//子线程调用liveData.postValue("test") 13、LiveData 为什么被设计出来,解决了什么问题?LiveData作为一种观察者模式设计思想,常常被和RxJAVA一起比较,观察者模式的最大好处就是事件发射的上游 和 接收事件的下游 互不干涉,大幅降低了互相持有的依赖关系所带来的强耦合性 。其次,LiveData还能无缝衔接到MVVM架构中,主要体现在其可以感知到Activity等生命周期,这样就带来了很多好处:
- 不会发生内存泄漏 观察者会绑定到 Lifecycle对象,并在其关联的生命周期遭到销毁后进行自我清理 。
- 不会因 Activity 停止而导致崩溃 如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件 。
- 自动判断生命周期并回调方法 如果观察者的生命周期处于 STARTED 或 RESUMED状态,则 LiveData 会认为该观察者处于活跃状态,就会调用onActive方法,否则,如果 LiveData 对象没有任何活跃观察者时,会调用 onInactive()方法 。
订阅方法,也就是observe方法 。通过该方法把订阅者和被观察者关联起来,形成观察者模式 。
简单看看源码:
@MainThreadpublic void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) {assertMainThread("observe");//...LifecycleBoundObserver wrApper = new LifecycleBoundObserver(owner, observer);ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);if (existing != null && !existing.isAttachedTo(owner)) {throw new IllegalArgumentException("Cannot add the same observer"+ " with different lifecycles");}if (existing != null) {return;}owner.getLifecycle().addObserver(wrapper);}public V putIfAbsent(@NonNull K key, @NonNull V v) {Entry<K, V> entry = get(key);if (entry != null) {return entry.mValue;}put(key, v);return null;}这里putIfAbsent方法是讲生命周期相关的wrapper和观察者observer作为key和value存到了mObservers中 。回调方法,也就是onChanged方法 。通过改变存储值,来通知到观察者也就是调用onChanged方法 。从改变存储值方法setValue看起:
推荐阅读
- 面试必问的 Redis:RDB、AOF、混合持久化
- 女人单身太久的十大负面表现
- |为什么说人在职场,尊严和面子都是争回来的,不是舔回来的
- 汽车|美国面临40年来最严重通胀 汽油、汽车、食品等统统暴涨:居民直呼疯狂
- 发型|女人50岁以后,放弃黑长直和泡面卷吧,这4种发型更减龄洋气
- 面霜|7款最受英国人喜欢的保湿面霜
- 翡翠|翡翠里面有气泡正常吗?这并不是注胶翡翠,而是另一种替代品
- QQ|成功瘦身!QQ 8.8.88安卓版发布:安装包缩小至625MB
- 吐血整理!这200道阿里P6必备Java面试题,我简直太爱了
- 显示器也走入全面屏时代 它为何更值得选择?
