现象:
1.使用picasso的public void into(Target target);加载图片,第一次加载时,回调不执行。
2.第二次加载时,回调可以执行。
定位过程:
1.打开picasso日志,发现第一次时,图片已经从网络下载了。
2.单步源码,发现在加载完成后,target为null
3.进一步阅读源代码,发现target为WeakReference对象
结论:
第一次加载是从网络加载,异步,target对象被回收,故回调不执行。
第二次是从picasso的cache里获取,同步,target不会被回收,回调可以执行。
在调用的地方,持有target对象,就可以解决第一次回调不执行的问题。