Picasso的用法记录

我上家公司的产品是日活几百万的一款产品,里面有很大很大量的网络图片。2014年之前我们用的是很古老的ImageLoader,当时线上日志每天都有几百上千条BitMap OOM的日志,我们是各种优化这个ImageLoader(以牺牲图片质量为代价),但是依然止不住OOM爆出,真是头疼不已。后来我们尝试使用了square公司开源的Picasso这个图片加载工具,上线后,奇迹发生了,原来每天几百上千的OOM日志,一条都没了。真是让我们震惊不已,从此Picasso 在我们心中就是图片加载的神器。现在记录下它的一些常用的用法:

指定缓存路径:

private void loadImageCache() { final String imageCacheDir = "";
   Picasso picasso = new Picasso.Builder(this).downloader( new OkHttpDownloader(new File(imageCacheDir))).build();
   Picasso.setSingletonInstance(picasso);
}

1、fetch()方法将会在后台异步加载图片,但是它既不会在ImageView中显示出来,也不会返回bitmap。它只是会将图片下载下来。目的是为了你之后用这个图片时减少加载时间,当然,后面的Callback可以不传:

        Picasso.with(this).load(Url).fetch(new Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {

            }
        });
2、把图片加载到ImageView上,并且给一个回调:
        Picasso.with(this).load(Url).into(image, new Callback() {
            @Override
            public void onSuccess() {
                
            }

            @Override
            public void onError() {

            }
        });

3、下载图片并且给一个带图片的回调:

        Picasso.with(this).load(Url).into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        });
4、get()方法直接去得到一张图片,当然这个方法是耗时的,不能在UI线程,需要放到new Thread()来做这件事情:(建议还是用上面的回调方便一些)
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    Bitmap bitmap = Picasso.with(this).load(url).get();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
5、指定优先级。比如,你某张图片和重要,想先加载;某些图片不重要,优先级放低。那么可以这么写(但是需要注意的是:你自己指定的Picasso的请求的顺序代码并没有效果,Picasso是按照你指定的优先级来加载图片的):
        Picasso.with(this).load(url)
                .centerCrop()
                .priority(Picasso.Priority.HIGH)
                .into(imageView);
        Picasso.with(this).load(url)
                .centerCrop()
                .priority(Picasso.Priority.LOW)
                .into(imageView);
6、picasso的tag用法,有点复杂,可以参看这篇文章:http://blog.csdn.net/u011337574/article/details/51586714:
        Picasso.with(this).load(url)
                .centerCrop()
                .tag("pause")
                .into(imageView);

        Picasso.with(this).resumeTag("pause");
        Picasso.with(this).pauseTag("pause");
        Picasso.with(this).cancelTag("pause");
7、picasso自带的图片旋转和缩放,参看这篇:http://blog.csdn.net/u011337574/article/details/51590578
        Picasso.with(this).load(url)
                .centerCrop()
                .rotate(90f)
                .into(imageView);


如果你觉得帮到了你,请给作者打赏一口饭吃:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值