股票场内基金交易,没时间盯盘?

   
使用优财助手电脑客户端记录下您的股票买入卖出数据,能帮您时刻盯盘,会根据您记录的未售出买入价计算上涨或下跌幅度,及时弹框通知您。想知道如何使用?快点击左方视频观看了解吧~~下载地址:http://youcaizhushou.com

上篇文章介绍了 Fresco 中 image pipeline 的基本概念和流程,本文通过实例代码演示如何实现 image pipeline

示例

首先通过示例来回顾下 image pipeline 的使用流程,接着从使用流程入手,逐步分析其实现原理

通过示例可以了解到,image pipeline 的流程大致如下:

  • 创建图片请求 ImageRequest

  • 根据图片请求创建数据源 DataSource

  • 创建数据订阅者 DataSubscriber

  • 将数据订阅者注册到数据源中

可以看到,以上的流程是一个典型的 观察者模式 的应用,接下来就顺着这个流程分析源码的实现

源码分析

创建图片请求

图片请求 ImageRequest 如同大多数配置创建的过程一样,涉及到很多自定义的选项,因此使用了建造者模式来实现各种不通配置的 ImageRequest 的创建,这部分的源码就不深入研究,在 Fresco 中大量使用了建造者模式,感兴趣的读者可以结合 ImagePipelineConfig 等一些配置的创建过程一起阅读分析使用建造者模式的源码

创建数据源

数据源根据自定义的图片请求创建

下面进入到 fetchDecodedImage() 方法所在的 ImagePipeline.java 文件中。这里选择了 fetchDecodedImage() 方法来研究,即请求未解码的图片,在上篇文章中记录了其它几种请求方式,都可以在源码中找到对应的方法,这里就不贴出来了,感兴趣的可以查阅对应的源码。

在这里主要进行了两个操作:

  • 获取数据:根据 imageRequest 创建一个 Producer 类型实例

  • 提交数据:将 Producer 实例和 imageRequest 传递给 submitFetchRequest() 进行封装

下面从这两个方向来分析

获取数据

进入到 getDecodedImageProducerSequence() 方法所在的 ProducerSequenceFactory.java 文件中:

这个方法只做了一件事,就是得到一个 Producer 类型的实例 pipelineSequence,它的创建过程是通过 getBasicDecodedImageSequence() 实现的,进入到这个方法中:

在这里,首先获取 imageRequest 中的 uri,根据 uri 的类型返回不同的 Producer 实例,这个过程使用了 装饰者模式,具体的创建过程就不再细说,最终将会创建一个 BitmapMemoryCacheProducer 类的实例,这个实例将会在提交数据时作为参数传入 submitFetchRequest() 方法中。

提交数据

在调用 submitFetchRequest() 方法时传入的第三个参数,即最低请求级别,这里使用了固定值 RequestLevel.FULL_FETCH,作为默认的请求级别。接下来进入到 submitFetchRequest() 方法中

在这个方法中根据 imageRequest 创建了一个 SettableProducerContext 实例,并用它创建了一个 CloseableProducerToDataSourceAdapter 类型实例,下面进入到 create() 方法所在的 CloseableProducerToDataSourceAdapter.java 中

这个类中的代码比较简单,通过 create() 方法返回一个当前类的实例,初始化过程中会调用父类的构造方法,因此接下来进入到其父类 AbstractProducerToDataSourceAdapter.java 中:

在父类的构造器中调用了请求监听器 mRequestListener 的 onRequestStart()方法,接着调用了 Producer 实例的 produceResult() 方法,传入 一个回调接口 Consumer。这里的 Producer 实例就是前面提到的 BitmapMemoryCacheProducer,它的 produceResults 方法如下:

在这个方法中,通过调用 consumer 的 onNewResult(),会调用到 AbstractProducerToDataSourceAdapter.java 中的 onNewResultImpl() 方法:

父类的 setResult() 方法是这样的:

到这里,思路就应该清晰了,整个通知者模式的实现已经浮出水面,接下来在父类 AbstractDataSource.java 中能够看到通知者模式中数据源应有的一些功能,包括注册订阅者,轮询通知订阅者,具体代码就不贴出来了,感兴趣的读者可以查看源码,下面是类继承关系图:classclass

总结

通过以上分析,能够大概了解 Fresco 中 Image Pipeline 的实现过程,其中涉及到的设计模式很有意思,值得深入学习。

   

想获得去掉 5 元限制的证券账户吗?

证券交易股票基金的佣金,不足 5 元会按照 5 元收取。比如交易 1000 元的股票,按照普遍的证券佣金手续费率万 2.5,其交易佣金为 0.25 元,小于 5 元,实际会收取佣金 5 元,买卖两次需要支付 10 元佣金成本,1% 的利润就这样没了。

如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。

请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注