接口统一系列之图片加载

勿忘初心2018-09-04 13:04

作者:梁伟伟


前言

每个app必不可少地都会涉及到图片加载,目前流行的Android开源库也有很多,例如Universal ImageLoader、Glide、Fresco、Picasso等等。

当只参与第一个项目的时候,开始我们可能自己就维护了一套图片加载管理模块,但是参与了第二个项目或者第三个项目之后,发现使用了不同的开源库,我们同时维护三个项目时,这时候会增加学习使用成本,维护起来比较累。而且如果我们想替换加载库的时候,每个调用的地方都需要修改,非常耗时耗力,而且容易出现问题。
那有没有什么方法,可以让我们替换加载库的成本比较低,维护学习成本也比较低呢?


方法

为了解决上述问题,我们可以再封装一层或者增加一个代理层,剥离业务逻辑和图片加载的具体接口。
整体思路就是业务层委托代理层去办事情,比如,展示出webp格式的图片、返回给我bitmap、增加展示动画效果等等各类业务需求,而业务层不需要关心具体的加载库是怎么使用的,加载库是怎么实现的,只要调用业务需要的展示接口就好了。

因此,我们每个项目只要统一代理层的业务需求逻辑接口就可以了,代理层的具体实现可以不同。这样我们在不同的项目只要专注业务逻辑调用就可以了,而且如果要替换加载库,只需要在代理层修改就好了。


实践

在网易漫画项目中,一开始我们使用是自己管理的一套加载库,业务层直接调用。后来为了方便增加gif下载显示的需求,我们使用了Glide开源库,为了避免以后还可能会替换,我们当时就封装了一层,每个业务调用的地方都改了一遍,相当耗时,不过欣慰的是我们统一了业务接口之后,以后维护代理层就可以了。


这里我们简单地封装了一层,没有使用代理模式和工厂模式,只要根据业务需求调用对应的静态类即可,封装一小步,简便一大步!


结语

随着文学漫画产品部的成立,同时需要维护多个产品,一些业务逻辑例如图片加载,网络请求、数据库存储等等,业务接口统一起来还是很有必要的,对于老项目维护,新项目成立具有非常大的意义。




网易云大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者梁伟伟授权发布