Picasso设计浅析

一.结构分析


Picasso设计浅析_第1张图片
picasso组成结构

1.核心对象创建

初始化后续需要使用使用的对象,如

Picasso、Dispatcher、BitmapHunter、RequestHandler、Request、Action、Cache、DownLoader等

2.任务分发处理

当收到图片下载的请求后,会把Request等所有信息封装到Action中,交给Dispatcher进行任务的分发处理

3.选择数据请求方式

根据不同的Action中Request类型的不同,选择匹配的RequestHandler去获取数据

4.获取数据

从Cache直接获取或者DownLoader来下载Bitmap

5.数据的后续处理

刷新数据,并选择是否进行缓存处理

二.简要流程分析


Picasso设计浅析_第2张图片
Picasso时序图

1~5 : 核心对象创建

主要有with()和into()方法

with() ,创建Picasso、Dispatcher、RequestHandler、PicassoExecutorService、DownLoader、Cache等

into() ,创建RequestCreator

6~13:任务分发处理

创建Request --. 构建Action --> enqueueAndSubmit(action) --> submit(action) --> dispatch(action) --> performSubmit(action) --> 构建BitmapHunter --> PicassoExecutorService提交BitmapHunter

14:选择数据请求方式

根据Action中Request类型的不同,选择匹配的RequestHandler去获取数据

15:获取数据

从Cache直接获取或者DownLoader来下载Bitmap

16~20:数据的后续处理

刷新数据,并选择是否进行缓存处理

三.源码分析

Picasso源码相关分析,可以看这里

四.消息处理的补充


Picasso设计浅析_第3张图片

其中有2个Handelr出现,下面结合时序图看下他们的使用时机

6~13:任务分发处理时,频繁使用DispatchThreadHandler

16~20:数据的后续处理时,使用MainThreadHandler,刷新ImageView

五.相关疑惑

1.在构建Action时,如果该Action已经存在,则会将它添加到一个集合中,后续还会对包含重复Action的这个集合进行处理,为什么不是取消之前的Action,执行最新的Action?

2.分发器Dispatcher中,会初始化一个DispatchThread,最终这个线程会由线程池PicassoExecutorService来执行,如果是加载图片列表,那么除了DispatchThread会被执行外,另外的2个线程是怎么执行的?怎么和Dispatcher关联的?

你可能感兴趣的:(Picasso设计浅析)