简述:
由Square公司开源的一款图片加载和缓存的库,不过Picasso不支持磁盘缓存.也就是说如果想要做磁盘缓存的话需要另外想办法.(可以利用JakeWharton/DiskLruCache)
我们可以用一行代码Picasso.with(context).load(uri).into(imageview) 实现imageview请求图片。
查看into方法的源码,在最后使用Action,用于图片加载后的结果回调
Action action =
new ImageViewAction(picasso, target, request, memoryPolicy, networkPolicy, errorResId,
errorDrawable, requestKey, tag, callback, noFade);
ImageViewAction的第二个参数,target就是一开始into()传进来的参数imageview
ImageViewAction(Picasso picasso, ImageView imageView, Request data, int memoryPolicy,
int networkPolicy, int errorResId, Drawable errorDrawable, String key, Object tag,
Callback callback, boolean noFade) {
super(picasso, imageView, data, memoryPolicy, networkPolicy, errorResId, errorDrawable, key,
tag, noFade);
this.callback = callback;
}
父类即Action类的构造方法中将target即imageview放到弱引用中
this.target =
target == null ? null : new RequestWeakReference<T>(this, target, picasso.referenceQueue);
这段代码并不是把imageview控件里的bitmap放到弱引用里,因为ImageView有对context的引用,而这个context就是Activity,使用弱引用,这样可以避免图片从网络下载时间可能会很久的情况下内存泄露。