最近在实习单位使用Picasso重构掉UniversalImageLoader使使用了如下的代码
Picasso.with(this)
.load(pictureUrl)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
doSomeThing();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
doSomeThing()方法总是不会被调用,google后知道是由于target对象被GC了,我就想让target对象保持一个对imageview的引用,是不是就不会被GC了?结果是我想反了,GC时和不管你有没有保持别的对象的引用,只在乎你有没有被别的对象持有强引用,修改代码如下:
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
imageView.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
imageView.setTag(target);
Picasso.with(this).load(pictureUrl).into(target);