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

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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




看到这里有人可能要问,怎么会有contextActivityfragment这些参数呢?这是由于glide可以插入以上的三个参数,若是传入的是Activityfragment它根据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年的小说,自己开始动手写了一本,请各位猿们动动手指,点击下,有起点账号的可以收藏下!!《武意长存》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本人测试过,挺好用的,省去了好多麻烦:afinal 0.3 主要更新如下: 1、更新FinalBitmap模块,解决线程并发没有回收线程的问题 2、重写了FinalHttp模块 具体 change log 如下: FinalBitmap添加三个方法 public void onResume() public void onPause() public void onDestroy() 在activity生命周期方法中调用给方法释放内存和暂停图片加载线程 FinalHttp添加方法如下(目前AjaxCallBack泛型只支持String和file。有时间将会扩展JSONObject,xmlDom,byte[],bitmap等): public HttpClient getHttpClient() public HttpContext getHttpContext() public void configCookieStore(CookieStore cookieStore) //配置cookie public void configUserAgent(String userAgent) public void configTimeout(int timeout)//配置超时时间 public void configSSLSocketFactory(SSLSocketFactory sslSocketFactory) //配置https请求 public void configRequestExecutionRetryCount(int count)//配置网络异常自动重复连接请求次数 public void addHeader(String header, String value) //添加http请求头 //------------------get 请求----------------------- public void get( String url, AjaxCallBack<? extends Object> callBack) public void get( String url, AjaxParams params, AjaxCallBack<? extends Object> callBack) public void get( String url, Header[] headers, AjaxParams params, AjaxCallBack<? extends Object> callBack) public Object getSync( String url) //同步get请求,请在子线程执行这个操作,否则非常有可能报ANR public Object getSync( String url, AjaxParams params) public Object getSync( String url, Header[] headers, AjaxParams params) //------------------post 请求----------------------- public void post(String url, AjaxCallBack<? extends Object> callBack) public void post(String url, AjaxParams params, AjaxCallBack<? extends Object> callBack) public void post( String url, HttpEntity entity, String contentType, AjaxCallBack<? extends Object> callBack) public void post( String url, Header[] headers, AjaxParams params, String contentType,AjaxCallBack<? extends Object> callBack) public void post( String url, Header[] headers, HttpEntity entity, String contentType,AjaxCallBack<? extends Object> callBack) public Object postSync(String url) //同步post请求,请在子线程执行这个操作,否则非常有可能报ANR public Object postSync(String url, AjaxParams params) public Object postSync( String url, HttpEntity entity, String contentType) public Object postSync( String url, Header[] headers, AjaxParams params, String contentType) public Object postSync( String url, Header[] headers, HttpEntity entity, String contentType) //------------------put 请求----------------------- public void put(String url, AjaxCallBack<? extends Object> callBack) public void put( String url, AjaxParams params, AjaxCallBack<? extends Object> callBack) public void put( String url, HttpEntity entity, String contentType, AjaxCallBack<? extends Object> callBack) public void put(String url,Header[] headers, HttpEntity entity, String contentType, AjaxCallBack<? extends Object> callBack) public Object putSync(String url) //同步put请求,请在子线程执行这个操作,否则非常有可能报ANR public Object putSync( String url, AjaxParams params) public Object putSync(String url, HttpEntity entity, String contentType) public Object putSync(String url,Header[] headers, HttpEntity entity, String contentType) //------------------delete 请求----------------------- public void delete( String url, AjaxCallBack<? extends Object> callBack) public void delete( String url, Header[] headers, AjaxCallBack<? extends Object> callBack) public Object deleteSync(String url) //同步delete请求,请在子线程执行这个操作,否则非常有可能报ANR public Object deleteSync( String url, Header[] headers) //---------------------下载--------------------------------------- public void download(String url,String target,AjaxCallBack<File> callback) public void download( String url,AjaxParams params, String target, AjaxCallBack<? extends Object> callback) 附送请求demo和下载demo

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值