- Android数据绑定技术一,企业级开发
- Android数据绑定技术二,企业级开发
- Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
- Android JetPack~ LiveData (一) 介绍与使用
- Android JetPack~LiveData(二) 数据倒灌问题
- Android JetPack~ ViewModel (一) 介绍与使用
1、数据倒灌的出现
场景:
如果我们在一个home页面获取网络数据,然后通过LiveData的观察者特性,在回调中跳转B页面,当旋转屏幕时,页面重建,LiveData又发来最后一次数据,那么直接触发了跳转B页面的代码。这就是数据倒灌引起的问题。因为LiveData的数据会保存在内存中。
数据倒灌原因:
private abstract class ObserverWrapper {
final Observer<? super T> mObserver;
boolean mActive;
// 第一处
int mLastVersion = START_VERSION;
}
private void considerNotify(ObserverWrapper observer) {
...
// 第二处
if (observer.mLastVersion >= mVersion) {
return;
}
// 第三处
observer.mLastVersion = mVersion;
observer.mObserver.onChanged((T) mData);
}
倒灌原因小结
注意
解决办法
- 屏幕旋转
- 用户手动切换系统语言
- 如果应用不需要横屏,就设置为永久竖屏。
- 如果当前Activity回到前台LiveData不需要接收最新的数据,可以使用下面三中扩展的LiveData
- 官方扩展的SingleLiveEvent
- 美团反射修改mVersion
- UnPeek-LiveData
- 设置android:configChanges="orientation|screenSize",这样普通生命周期就不走了
文章来源地址https://www.toymoban.com/news/detail-431828.html
待续。。。。。
文章来源:https://www.toymoban.com/news/detail-431828.html
到了这里,关于Android JetPack~LiveData(二) 数据倒灌问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!