Может ли кто-нибудь объяснить мне комментарий здесь:
Не создавайте анонимный класс 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;
}
Предполагая, что обратный вызов является анонимным классом, он создаст ссылку на его родительский класс, тем самым предотвратив сборку родительского объекта.
Согласно строке 48 действия. .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);
Может кто-нибудь объяснить, что я неправильно понимаю?
Target
, в противном случае он получит gc'ed, потому что Пикассо хранит в нем толькоWeakReference
. - person dnkoutso   schedule 11.12.2013cancel(target)
, чтобы освободить ссылку и предотвратить временную утечку, пока не завершится загрузка Picasso. - person dnkoutso   schedule 11.12.2013