本地刷新和网络刷新,在添加到界面的时候会有可能冲突;导致数据显示异常———提问2
来源:8-17 数据流封装-推送消息处理-1
weixin_慕尼黑8068974
2020-03-09
老师关于17年同学对这方面的提问
https://coding.imooc.com/learn/questiondetail/37313.html
你给出了以下回答
首先给你一个赞~~
你的思路是正确的,这里的确存在冲突的情况,如果网络足够快,而数据库查询慢的情况会导致数据显示异常的问题;要解决这个问题也很简单,将这边显示到页面的逻辑丢入到一个单线程队列中去运行。
然后网络返回的数据先进行数据库入库,然后再次进入到队列中执行,那么就不存在这个问题了。
这个问题是因为多线程的并发,而没有统一的消费者来做顺序执行会导致的问题,感谢你的指出。
非常抱歉才回复,抱歉。
我也发现了这个问题。这个漏洞是否有进展?
或者 按照你给出的思路,我理解了一下,你看对不对:
开始 假如本地加载和网络加载是同时进行,而开始本地加载采用直接进入一个单线程队列里进行。网络加载回来后先入库,之后也同样进入到上面那个单线程队列,这样就保证了网络加载就一定在本地加载的后面,就不会出现数据过期的问题了是吗?
写回答
1回答
-
解决办法有两个:
1. 在本地加载之后再进行网络请求,用户等待时间会偏长一些
2. 启动本地加载、启动网络加载、网络回来后直接入库到本地缓存中-使用本地缓存监听器更新界面
3. 启动本地加载、启动网络加载,若网络加载先回来本地内存保存一个变量区分即可,当本地加载回来时若有该标志,则不更新界面。
以上3种方案都是可以做到修复上述BUG的能力。152020-04-05
相似问题
有时候收不到消息
回答 1
这里为什么还要全部刷新?
回答 1