关于Picasso回调获取bitmap第一次加载失败的问题

来源:互联网 发布:烘焙成本核算软件 编辑:程序博客网 时间:2024/06/07 01:55

最近做一个功能的时候需要用到根据网络图片来获取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()
完美解决,只是要单开一个线程才可以,要是谁有更合适的方法希望告知,一起学习

阅读全文
0 0