現(xiàn)象:
1.使用picasso的public void into(Target target);加載圖片隧土,第一次加載時迁匠,回調(diào)不執(zhí)行辰狡。
2.第二次加載時,回調(diào)可以執(zhí)行菊匿。
定位過程:
1.打開picasso日志付呕,發(fā)現(xiàn)第一次時,圖片已經(jīng)從網(wǎng)絡(luò)下載了跌捆。
2.單步源碼徽职,發(fā)現(xiàn)在加載完成后,target為null
3.進(jìn)一步閱讀源代碼疹蛉,發(fā)現(xiàn)target為WeakReference對象
結(jié)論:
第一次加載是從網(wǎng)絡(luò)加載活箕,異步,target對象被回收可款,故回調(diào)不執(zhí)行。
第二次是從picasso的cache里獲取克蚂,同步闺鲸,target不會被回收,回調(diào)可以執(zhí)行埃叭。
在調(diào)用的地方摸恍,持有target對象,就可以解決第一次回調(diào)不執(zhí)行的問題赤屋。