本地刷新和网络刷新,在添加到界面的时候会有可能冲突;导致数据显示异常———提问2

来源:8-17 数据流封装-推送消息处理-1

weixin_慕尼黑8068974

2020-03-09

老师关于17年同学对这方面的提问
https://coding.imooc.com/learn/questiondetail/37313.html
你给出了以下回答

首先给你一个赞~~

你的思路是正确的,这里的确存在冲突的情况,如果网络足够快,而数据库查询慢的情况会导致数据显示异常的问题;要解决这个问题也很简单,将这边显示到页面的逻辑丢入到一个单线程队列中去运行。

然后网络返回的数据先进行数据库入库,然后再次进入到队列中执行,那么就不存在这个问题了。

这个问题是因为多线程的并发,而没有统一的消费者来做顺序执行会导致的问题,感谢你的指出。

非常抱歉才回复,抱歉。


我也发现了这个问题。这个漏洞是否有进展?
或者 按照你给出的思路,我理解了一下,你看对不对:

开始 假如本地加载和网络加载是同时进行,而开始本地加载采用直接进入一个单线程队列里进行。网络加载回来后先入库,之后也同样进入到上面那个单线程队列,这样就保证了网络加载就一定在本地加载的后面,就不会出现数据过期的问题了是吗?

写回答

1回答

Qiujuer

2020-03-12

解决办法有两个:
1. 在本地加载之后再进行网络请求,用户等待时间会偏长一些
2. 启动本地加载、启动网络加载、网络回来后直接入库到本地缓存中-使用本地缓存监听器更新界面
3. 启动本地加载、启动网络加载,若网络加载先回来本地内存保存一个变量区分即可,当本地加载回来时若有该标志,则不更新界面。

以上3种方案都是可以做到修复上述BUG的能力。

1
5
Qiujuer
回复
weixin_慕尼黑8068974
不客气哈
2020-04-05
共5条回复

手把手开发完整的即时通讯App 客户端+服务端+MVP架构

客户端+服务端+MVP架构+封装思想+主流框架

1749 学习 · 872 问题

查看课程