Fresco的ImagePipeLine模块是负责图片的下载,缓存,处理的核心模块。在这个模块中,有两个重要的接口类 Producer && Consumer。顾名思义,这里有个是生产--消费的设计模式。不过要注意的是这里的Consumer接口,是用来进行Producer状态的通知,是通往真正的消费者的桥梁。
下面我们分别来看一下:Producer
实现Producer接口的类很多,从名字上看涉及了Bitmap缓存,编码,memory缓存,文件缓存,图像转换,Asset、resource、webp、exif thumbnail、video thumbnail获取,后处理等所有功能的产品"生产“。而Producer的作用就是创建在image 流水线中用于image处理的数据块,每一个实现类都代表了一个独立的任务,把整个的图片载入处理流程分散为一系列的Producer使调用者根据实际需要可以组合出不同的请求。这也是组合模式的核心价值。
Consumer
Consumer实现类的作用是消费Producer生产的数据。Producer通过这个接口类定义的通用接口通知用户请求的数据的状态,成功还是发生了错误。之前说过了,请求是通过一系列的producer组合来的,所以执行请求实际上是通过了一系列的producer的输入产出,也同样的会调用一系列相应的消费实现类。
Consumer定义了下面四个回调接口:
void onNewResult(T newResult, boolean isLast);
newResult里保存着producer生产的产品,isLast用来指示是否是PipeLine上最后的一个环节,是则意味着这是最终的产品了。
void onFailure(Throwable t);
生产失败的回调。
void onCancellation();
在生产的过程中,这次生产被取消时调用。
void onProgressUpdate(float progress);
可以表示生产的进度,progress的范围是0到1.
另外,由于Closeable机制,在真正的消费者使用数据时,要clone再使用。