1. 程式人生 > >Android圖片載入庫三、Picasso

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,使用弱引用,這樣可以避免圖片從網路下載時間可能會很久的情況下記憶體洩露。