Android图片加载库三、Picasso

简述:

由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,使用弱引用,这样可以避免图片从网络下载时间可能会很久的情况下内存泄露。

猜你喜欢

转载自blog.csdn.net/u010144805/article/details/81332625