Как анонимный класс получит GC'd в Пикассо на Android?

Может кто-нибудь объяснить мне комментарий здесь:

Не создавайте анонимный класс Target при вызове Picasso, поскольку это может привести к сбору мусора. Сохраняйте поле участника как надежную ссылку, чтобы предотвратить его получение

В строке 30 ImageViewAction.java этот обратный вызов является надежной ссылкой.

ImageViewAction(Picasso picasso, ImageView imageView, Request data, boolean skipCache,
      boolean noFade, int errorResId, Drawable errorDrawable, String key, Callback callback) {
    super(picasso, imageView, data, skipCache, noFade, errorResId, errorDrawable, key);
    this.callback = callback;
  }

Предполагая, что Callback является анонимным классом, он создает ссылку на свой родительский класс, тем самым предотвращая родительский класс от GC.

В строке 48 файла Action.java самой целью является WeakReference, но это не обратный вызов.

  Action(Picasso picasso, T target, Request data, boolean skipCache, boolean noFade,
      int errorResId, Drawable errorDrawable, String key) {
    this.picasso = picasso;
    this.data = data;
    this.target = new RequestWeakReference<T>(this, target, picasso.referenceQueue);

Может кто-нибудь объяснить, что я неправильно понимаю?

1 ответ

Я был смущен, и комментарий ссылался на цель (ImageView), а не на обратный вызов. Шаблон использования анонимного обратного вызова в порядке.

Другие вопросы по тегам