主頁(yè)列表由三個(gè)接口數(shù)據(jù)組成举娩,三個(gè)請(qǐng)求順序執(zhí)行 live-->hot-->fame馒稍,每個(gè)請(qǐng)求完后將數(shù)據(jù)放入同一個(gè)ArrayList华匾,即這個(gè)list包含了三個(gè)接口返回的數(shù)據(jù)映琳。
下拉刷新時(shí),在live接口開始請(qǐng)求前蜘拉,執(zhí)行一次list.clear();
這時(shí)候產(chǎn)生的問題是萨西,連續(xù)刷新2次,但第一次的數(shù)據(jù)因?yàn)榻涌诼诵裥瘢瑳]有返回谎脯,就開始執(zhí)行了第二次串行請(qǐng)求,此時(shí)list.clear()的是一個(gè)空數(shù)據(jù)集合持寄,當(dāng)2次串行接口請(qǐng)求返回后會(huì)被裝入2遍相同數(shù)據(jù)源梭。
解決1:在fame接口返回?cái)?shù)據(jù)后 進(jìn)行 三個(gè)接口數(shù)據(jù)的統(tǒng)一裝入娱俺,裝入前clear。
解決2:如果此時(shí)網(wǎng)絡(luò)請(qǐng)求中包含live-->hot-->fame三個(gè)接口中的任何一個(gè)废麻,當(dāng)再次有請(qǐng)求到來時(shí)荠卷,cancel掉。
總結(jié):對(duì)同一個(gè)數(shù)據(jù)的裝入與清除務(wù)必在同一個(gè)線程(最好在同一個(gè)方法內(nèi)烛愧,更好是在上下兩條語句內(nèi))進(jìn)行油宜。
補(bǔ)充:在同一個(gè)線程中指的是,裝入和清除操作必須始終在同一個(gè)線程中怜姿,
即這種: ui線程(清除)-->子線程-->ui線程(裝入) 操作看似在同一線程中慎冤,但有線程的切換的也不行。