主页列表由三个接口数据组成,三个请求顺序执行 live-->hot-->fame,每个请求完后将数据放入同一个ArrayList,即这个list包含了三个接口返回的数据。
下拉刷新时,在live接口开始请求前,执行一次list.clear();
这时候产生的问题是,连续刷新2次,但第一次的数据因为接口慢了,没有返回,就开始执行了第二次串行请求,此时list.clear()的是一个空数据集合,当2次串行接口请求返回后会被装入2遍相同数据。
解决1:在fame接口返回数据后 进行 三个接口数据的统一装入,装入前clear。
解决2:如果此时网络请求中包含live-->hot-->fame三个接口中的任何一个,当再次有请求到来时,cancel掉。
总结:对同一个数据的装入与清除务必在同一个线程(最好在同一个方法内,更好是在上下两条语句内)进行。
补充:在同一个线程中指的是,装入和清除操作必须始终在同一个线程中,
即这种: ui线程(清除)-->子线程-->ui线程(装入) 操作看似在同一线程中,但有线程的切换的也不行。