Android LiveData粘性,粘连,倒灌

2022-05-27  本文已影响0人  周_0717

工作机制:每次改变LiveData数据都会对数据版本号加1,并触发版本号小于数据版本号的观察者监听,触发后观察者的版本号与数据版本号一致。

粘性事件:更新数据后,观察者再订阅,新注册的观察者版本号为-1小雨数据版本号,所以注册时会触发一次数据监听。

数据粘连:LiveData的激活状态标识,会在对应的LifecyOwner执行onStart后设置为true,执行onDestroy后设置为false,在未激活状态下无论发生多少次改变,只有最后一次数据会发送给观察者。

数据倒灌:由于LiveData的激活状态标识先变为false,再变为true,导致触发小于数据版本号的所有观察者的监听。常见场景为:使用ViewModel持有LivaData,并在生命周期内创建监听对象,则在Activity由于屏幕翻转等配置变化引发onDestroy时,ViewModel不会执行clear,因此保留了内部的LiveData,而在生命周期内重新创建监听对象的版本号为-1,所以在onStart之后会触发观察者监听。

解决方案:
1.修改version
2.复写LiveData
3.包装事件,事件内带处理状态

2022-04-11

上一篇下一篇

猜你喜欢

热点阅读