Android开发:在使用picasso 加载本地图片加载图片时,使用String参数不显示图片,直接使用网址作为参数可以加载出来

图片加载在Android开发中是非常重要,好的图片加载库也比比皆是。ImageLoader、Picasso、Glide、Fresco均是优秀的图片加载库。

以上提到的几种图片加载库各有特色。用法与比较,网上已经很多了。

出于学习的角度,个人认为从Picasso入手较好。代码量小,同时API优美,很适合我们学习。

今天笔者就Picasso的源码进行分析,抛出一些图片加载的技术细节供园友参考。

PS:建议园友先大致看一下源码。

部分,兼顾单请求加载速度与多请求并发能力,从而提高整体加载速度。

是图片服务器,当MemoryCache和DiskCache均取不到图片时,网络拉取,成本最高。

若获取的图片Action与ImageView不符合,则丢弃,等待正确的Action执行完。

1.Picasso的线程池是优化过的,根据当前设备网络状况设置ThreadCount。

在网络良好的条件下,线程池持有较多线程,保证下载速度够快。在网络较差的条件下(2G网络等),线程池减少持有线程,保证带宽不会被多个连接阻塞。

请求线程Hunter对相同key的Action进行合并,请求完成后,Action依次得到图片。

以上是Picasso的一些基本策略,可能看不太懂,接下来结合Picasso加载ImageView图片的场景来串一下流程。

picasso的实例化有两种方式

此方法提供默认方式,生成单例的Picasso对象。

此方式提供自定义线程池、缓存、下载器等方法。

picasso作为图片加载库,作用便是下载图片。我们拿到picasso实例后,正常思路便是调用picasso.load()。

包括placeHolder与error图片,加载图片的大小、旋转、居中等属性。

into方法主流程梳理如下

后续的工作就交由Hunter来处理了

hunter的执行流程:在run()方法中执行hunt()方法尝试获取图片,结果(成功、失败、异常)交给Dispatcher回调。

hunt()方法主流程梳理如下:

原因是不能确定是main线程或Hunter线程在调用,所以Dispatcher索性对所有的调用均经过Dispatcher转发,转发后调用perform**()方法,这样即可保证在main线程中操作事件。

加载结束时调用。均调用batch方法,不过complete操作会将bitmap加入到cache中,以便后续调用。

跟随ImageView的图片加载,应该对Picasso的源码已经有了一定了解。但是还有几个相对独立的模块没有涉及到,园友们直接阅读源码即可。

Stats主要用于数据统计,很独立的模块。

}

前面我们对Picasso的用法有了一定得了解,下面就分析一下一些特殊情况下,Picasso的用法.

  Picasso的默认图片加载方式有一个淡入的效果,如果调用了noFade(),加载的图片将直接显示在ImageView上


}

* 由指定的路径和文件名创建文件

这样就轻松实现了,值得注意的是,我们经常用的是into(ImageView target),其实into还能传入很多不同的对象。今天有点晚了,先写到这,关于Picasso,还是有很多技巧可以探索的。之前还写过一篇的文章,也欢迎大家有空去指点一下。

}

我要回帖

更多关于 picasso 加载本地图片 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信