Picasso源码完全解析(一)--概述

来源:互联网 发布:ftp默认使用的端口号是 编辑:程序博客网 时间:2024/05/16 12:52

Picasso源码完全解析(一)--概述

Picasso源码完全解析(二)--Picasso实例的创建

Picasso源码完全解析(三)--Request和Action的创建

Picasso源码完全解析(四)--Action分发和执行

Picasso源码完全解析(五)--图片的获取(BitmapHunter)

Picasso源码完全解析(六)--请求的取消、暂停、和恢复

Picasso源码完全解析(七)-- CleanupThread 取消请求


Picasso源码完全解析(一)--概述

Picasso是一个省事的图片加载框架,对于复杂的图片加载需求,常常像这样一行代码搞定:


Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

很多在Android上图片加载的陷阱都被Picasso自动处理,比如:

  1. 在Adapter里处理ImageView的循环利用和下载取消
  2. 使用尽量少的内存处理复杂的图片转换
  3. 自动的内存和磁盘缓存

Picasso提供的功能有:

  1. Adapter下载--ImageView自动被复用并且之前的下载自动被取消
  2. image转换,支持自定义图片转换
  3. 支持占位图
  4. 支持调试

Picasso的使用方式:

通常在使用中,与开发者接触最多的是Picasso实例,Picasso提供一个默认的全局单例,我们使用with()静态方法获得就是这个默认单例,picasso采用链式调用的方式,使我们能够使用一行代码搞定图片加载,通常的使用方式如下:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

同时,你也可以对图片的尺寸做一些处理:

Picasso.with(context).load(url).resize(width,height).centerInside().into(imageView);

也可以设置一些占位图,用于图片预加载或者加载失败的展示:

Picasso .with(context)        .load(url)        .placeholder(R.drawable.loading)        .error(R.drawable.error)        .into(imageView);

以上演示的是使用默认全局单例来加载图片,这个默认全局单例可以满足大多数的图片加载需求,如果这个单例无法满足你的需求,你可以采取以下方案之一:

  1. 自己创建一个Picasso实例,并设置为单例(setSingletonInstance()),前提是在第一次调用with()之前设置
  2. 保持默认单例不变,自己定义另外的Picasso实例

在创建Picasso实例的时候,可以定义自己的RequestHandler用于图片请求处理;

picasso默认使用LRUCache对图片进行内存缓存,如果有其他内存缓存需求,可以在创建picasso实例的时候指定;

在2.5.2之前,如果应用集成了Okhttp3,那么Picasso使用OkHttp3进行下载,并自动进行磁盘缓存,否则使用HttpURLConnection进行下载,磁盘缓存需要自己指定。2.5.2以后默认使用OkHttp3进行下载,如果对图片下载有其他需求,可以自己实现Dowloader,并在创建Picasso实例的时候指定。

在使用Picasso加载图片的时候,可以自定义自己的Transformer,用于对bitmap的转换。

以上就是对Picasso的使用总结。下面开始Picasso源码分析之旅。

原创粉丝点击