一个串行请求的坑

主页列表由三个接口数据组成,三个请求顺序执行 live-->hot-->fame,每个请求完后将数据放入同一个ArrayList,即这个list包含了三个接口返回的数据。
下拉刷新时,在live接口开始请求前,执行一次list.clear();

这时候产生的问题是,连续刷新2次,但第一次的数据因为接口慢了,没有返回,就开始执行了第二次串行请求,此时list.clear()的是一个空数据集合,当2次串行接口请求返回后会被装入2遍相同数据。

解决1:在fame接口返回数据后 进行 三个接口数据的统一装入,装入前clear。
解决2:如果此时网络请求中包含live-->hot-->fame三个接口中的任何一个,当再次有请求到来时,cancel掉。

总结:对同一个数据的装入与清除务必在同一个线程(最好在同一个方法内,更好是在上下两条语句内)进行。
补充:在同一个线程中指的是,装入和清除操作必须始终在同一个线程中,
即这种: ui线程(清除)-->子线程-->ui线程(装入) 操作看似在同一线程中,但有线程的切换的也不行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,136评论 0 62
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang阅读 1,280评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 你一个人,看惯了人来人往,纵然心有牵挂偶有相思,但终究到不了心底。 你独自成长,习惯了孤独生活,嬉笑怒骂喜惧哀乐从...
    5读8丈夫阅读 307评论 1 1