最近做一个功能的时候需要用到根据网络图片来获取bitmap再进行下载到本地,网络框架一直使用的是Picasso,那就直接想得就是根据回调来获取
Picasso.with(context).load(url).into(new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
这个方法我想应该有很多人都会使用,我也是这么想的,确实也可以获取到bitmap,但是调试以后发了一个问发现第一次加载的时候并没有走onBitmapLoaded回调,导致我们第一次的时候无法显示图片。
后来发现问题出在Target上面,由于Picasso将target引用包装成了一个弱引用,当gc发生时target引用就很可能被回收从而无法回调。
那这个看来是走不通,接着看了一下Picasso后发现它听过了一个 get()方法
Bitmap bitmap = Picasso.with(context).load(url).get()
完美解决,只是要单开一个线程才可以,要是谁有更合适的方法希望告知,一起学习