您的位置:首页 > 移动开发 > Android开发

谈谈对通用的第三方工具库再封装的必要性

2016-07-06 10:30 871 查看
最近比较有空,想写点什么,又不知道写些什么,毕竟大多数东西网上都已经有了。今天就简单第谈谈在Android对于第三方工具库再封装的必要性,以及自己的一些实践,在此抛砖引玉,谈谈自己的思路。

 

我们在做项目的时候,网络模块、图片加载工具、数据库处理等这些第三方库基本是每个项目都必备的,特别是网络和图片这两个是每个项目都会用到的。而除了一些大公司外,这些工具想必大家用的都是第三方的开源库吧。

 

就拿图片加载的开源库来说吧,五花八门,有glide,fresco、xutils、picasso、Universal
Image Loader等等一系列的开源库。本人目前用的是glide,当然这里不谈如何选择,而是谈谈为何要再次封装,以及对于再次封装的一些自己的思路,供大家参考。

 

虽然现在已经有这么多开源库,但以后肯定会出现更多的图片加载开源库,我们有可能现在用的是这个开源库,而在未来有可能用的却是另外的开源库。当我们替换这些开源库时,我们就需要在每个用到的地方去进行修改,这个显然没什么技术含量,只是个体力活(以前曾遇到过,若是一个项目完成得差不多了,替换个加载图片的开源库估摸着替换这些地方得有1个多小时到2小时左右,当然这个不必计较多少时间,毕竟每个人每个项目肯定不一样,但一想到替换这些就头疼,完全懒得动手)。

 

上面提到的原因也就是我觉得有必要对这些通用的第三方开源库原因之一,那就是以后改动替换其他开源库太过麻烦。还有一点就是我们很可能需要在加载图片或者访问网络之前做一些操作,这时我觉得更必须将其再次进行简单的封装,以方便我们做一些相同的操作与处理。

 

好了,谈了这么多虚的,接下来就聊聊我自己是如何再次进行简单封装的(毕竟自己工作经验也不是很足,虽然知道有必要再次进行简单的封装,但封装得还不是很到位,这里只是起到一个抛砖引玉,给一些初学者一个启发,大神们请多指教,别拍砖啊!)。

 

目前我只对网络模块和图片加载模块做了一些简单的再次封装,这里就先以图片加载模块为例吧。(之后会附上封装后的代码供大家参考的,可惜没时间去写demo,说实话也懒得写,甚至懒得去重新封装得更好些,哈哈,就是这么懒,还用得过去就改得再改。)

 

图片加载这一块,在最早的时候我用的是xutils,后面改用了iamgeloader,再后面改用了glide。

 

有一个项目在从iamgeloader替换到glide的时候我觉得这样不行,必须得再次进行简单的封装,刚开始我是这么封装的:







看到这里有人可能要问,怎么会有context、Activity、fragment这些参数呢?这是由于glide可以插入以上的三个参数,若是传入的是Activity和fragment它根据Activity或者fragment的生命周期做一些处理。

 

好了,扯远了,回到正题。大家应该都发现这样有一个问题,虽然到最后调用的都是同一个方法load,但这样只要你每需要加一个参数你就有可能得加好多个方法,这明显是不合理的。

 

那么我们要怎样才能无论以后需要多加几个参数,或者不再使用以前的参数都不用再多写这么多方法,而以前调用方法的地方仍然不会报错,可以继续使用呢?

 

其实很简单,我们只需要将传入的参数改成对象即可,而之前所需的参数作为对象的属性,这样我们就可以只写一个方法,而所有的操作都这个方法里面做处理。以后若是有需要做一些新的操作或其他处理之类的,直接这个对象类中添加个成员变量,然后在调用的方法里修改代码即可。







这里就变成只要load一个方法了。接下来的调用也是很简单

new ImageBuilder(this, ivAvatar, creditBean.getOrganizationPicAddr(), ImageBuilder.LoadMode.URL)
.setScaleType(ImageView.ScaleType.FIT_XY)
.setDefaultImageId(R.drawable.ic_head_default)
.build();

这样是不是感觉以后扩展或者替换起来就会方便很多了。

 

至于网络的或者其它的也都差不多,思路都是一样的,当然可能会稍微复杂上一些。我在这里主要是想提供一些思路,其他的就不再多说,参考代码如下:

code.rar
PS:看了9年的小说,自己开始动手写了一本,请各位猿们动动手指,点击下,有起点账号的可以收藏下!!《武意长存》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息