Как анонимный класс получит 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), а не на обратный вызов. Шаблон использования анонимного обратного вызова в порядке.