picasso 之Action及其子类ImageViewAction

Action代表的是一个具体的加载类。

里有一个静态内部类

static class RequestWeakReference<M> extends WeakReference<M> {
    final Action action;
    public RequestWeakReference(Action action, M referent, ReferenceQueue<? super M> q) {
      super(referent, q);
      this.action = action;
    }
  }

这里的referent,在ImageViewAction中传进来就是ImageView

Action主要定义了两个方法

  abstract void complete(Bitmap result, Picasso.LoadedFrom from);
  abstract void error();

   构造方法:

Action(Picasso picasso, T target, Request request, int memoryPolicy, int networkPolicy,

      int errorResId, Drawable errorDrawable, String key, Object tag, boolean noFade) {

    this.picasso = picasso;

    this.request = request;

    this.target =

        target == null ? null : new RequestWeakReference<T>(this, target, picasso.referenceQueue);

    this.memoryPolicy = memoryPolicy;

    this.networkPolicy = networkPolicy;

    this.noFade = noFade;

    this.errorResId = errorResId;

    this.errorDrawable = errorDrawable;

    this.key = key;

    this.tag = (tag != null ? tag : this);

  }

   现在看子类ImageViewAction:    

    构造方法

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;

  }

    

@Override public void complete(Bitmap result, Picasso.LoadedFrom from) {
    if (result == null) {
      throw new AssertionError(
          String.format("Attempted to complete action with no result!\n%s", this));
    }
    ImageView target = this.target.get();    //这是一个虚引用
    if (target == null) {            //如果imageview已经被回收了,直接返回
      return;
    }
    Context context = picasso.context;
    boolean indicatorsEnabled = picasso.indicatorsEnabled;
    PicassoDrawable.setBitmap(target, context, result, from, noFade, indicatorsEnabled);
    if (callback != null) {
      callback.onSuccess();
    }
  }

    

你可能感兴趣的:(picasso 之Action及其子类ImageViewAction)